First Results: Skill Building and Self-Acceptance as Mechanisms of Positive Personality Change

Author

Michael Krämer

1 Load packages

Show the code
library(renv)
library(tidyverse)
library(broom)
library(labelled)
library(psych)
library(GPArotation)
#library(devtools)
#install_github("cran/multicon") # not on CRAN atm
library(multicon)
library(correlation)
library(careless)
library(corrplot)
library(lavaan)
library(semTools)
library(semPlot)
library(knitr)
library(ggdist)
library(ggforce)
library(cowplot)
library(nortest)
library(lmerTest)

2 Data cleaning

Show the code
source("clean_data.R")

3 Create item parcels

3.1 Well-being measures

Reshape data

Show the code
df_sbsa_wide_wb <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, rando, starts_with(c("sw06", "ml01", "rs01", "sc01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("sw06", "ml01", "rs01", "sc01")))
# colnames(df_sbsa_wide_wb)

3.1.1 Meaning in life

Check CFA item loadings at T1

cfa_meaning <- '
# Define the latent factors
meaning1 =~ NA*ml01_01_t1 + lambda1*ml01_01_t1 + lambda2*ml01_02_t1 + lambda3*ml01_03_t1 + lambda4*ml01_04_t1 + lambda5*ml01_05_t1 + lambda6*ml01_06_t1 + lambda7*ml01_07_t1 + lambda8*ml01_08_t1 + lambda9*ml01_09_t1 + lambda10*ml01_10_t1

# Intercepts
ml01_01_t1 ~ i1*1
ml01_02_t1 ~ 1
ml01_03_t1 ~ 1
ml01_04_t1 ~ 1
ml01_05_t1 ~ 1
ml01_06_t1 ~ 1
ml01_07_t1 ~ 1
ml01_08_t1 ~ 1
ml01_09_t1 ~ 1
ml01_10_t1 ~ 1

# Unique Variances
ml01_01_t1 ~~ ml01_01_t1
ml01_02_t1 ~~ ml01_02_t1
ml01_03_t1 ~~ ml01_03_t1
ml01_04_t1 ~~ ml01_04_t1
ml01_05_t1 ~~ ml01_05_t1
ml01_06_t1 ~~ ml01_06_t1
ml01_07_t1 ~~ ml01_07_t1
ml01_08_t1 ~~ ml01_08_t1
ml01_09_t1 ~~ ml01_09_t1
ml01_10_t1 ~~ ml01_10_t1

# Latent Variable Means
meaning1 ~ 0*1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
'
fit_cfa_meaning <- cfa(cfa_meaning, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_cfa_meaning, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 40 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           601         619
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                              1908.542
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4083.509
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.536
  Tucker-Lewis Index (TLI)                       0.404
                                                      
  Robust Comparative Fit Index (CFI)             0.536
  Robust Tucker-Lewis Index (TLI)                0.403

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10459.519
  Loglikelihood unrestricted model (H1)      -9505.247
                                                      
  Akaike (AIC)                               20979.037
  Bayesian (BIC)                             21110.995
  Sample-size adjusted Bayesian (SABIC)      21015.753

Root Mean Square Error of Approximation:

  RMSEA                                          0.298
  90 Percent confidence interval - lower         0.287
  90 Percent confidence interval - upper         0.310
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.298
  90 Percent confidence interval - lower         0.287
  90 Percent confidence interval - upper         0.310
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.240

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  meaning1 =~                                         
    m01_01_ (lmb1)    1.350    0.057   23.719    0.000
    m01_02_ (lmb2)   -0.393    0.063   -6.275    0.000
    m01_03_ (lmb3)   -0.186    0.068   -2.738    0.006
    m01_04_ (lmb4)    1.549    0.057   27.337    0.000
    m01_05_ (lmb5)    1.362    0.058   23.476    0.000
    m01_06_ (lmb6)    1.451    0.058   24.994    0.000
    m01_07_ (lmb7)   -0.191    0.065   -2.954    0.003
    m01_08_ (lmb8)   -0.331    0.069   -4.776    0.000
    m01_09_ (lmb9)   -1.435    0.066  -21.800    0.000
    m01_10_ (lm10)   -0.690    0.069   -9.969    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_1 (i1)    4.201    0.068   62.074    0.000
   .ml01_02_1         5.378    0.061   88.527    0.000
   .ml01_03_1         5.023    0.064   78.011    0.000
   .ml01_04_1         3.847    0.071   54.225    0.000
   .ml01_05_1         4.401    0.069   64.031    0.000
   .ml01_06_1         3.890    0.070   55.311    0.000
   .ml01_07_1         5.017    0.062   81.284    0.000
   .ml01_08_1         4.948    0.066   74.644    0.000
   .ml01_09_1         3.877    0.076   50.907    0.000
   .ml01_10_1         4.894    0.069   71.179    0.000
    meaning1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_t1        0.930    0.065   14.416    0.000
   .ml01_02_t1        2.060    0.120   17.180    0.000
   .ml01_03_t1        2.458    0.142   17.307    0.000
   .ml01_04_t1        0.625    0.055   11.469    0.000
   .ml01_05_t1        0.984    0.068   14.493    0.000
   .ml01_06_t1        0.866    0.063   13.702    0.000
   .ml01_07_t1        2.253    0.130   17.303    0.000
   .ml01_08_t1        2.532    0.147   17.247    0.000
   .ml01_09_t1        1.425    0.094   15.182    0.000
   .ml01_10_t1        2.365    0.140   16.943    0.000
    meaning1          1.000                           
tidy(fit_cfa_meaning) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 10 × 11
   term         op    label estimate std.error statistic  p.value std.lv std.all
   <chr>        <chr> <chr>    <dbl>     <dbl>     <dbl>    <dbl>  <dbl>   <dbl>
 1 meaning1 =~… =~    lamb…    1.55     0.0567     27.3  0         1.55    0.891
 2 meaning1 =~… =~    lamb…    1.45     0.0581     25.0  0         1.45    0.842
 3 meaning1 =~… =~    lamb…   -1.44     0.0658    -21.8  0        -1.44   -0.769
 4 meaning1 =~… =~    lamb…    1.36     0.0580     23.5  0         1.36    0.808
 5 meaning1 =~… =~    lamb…    1.35     0.0569     23.7  0         1.35    0.814
 6 meaning1 =~… =~    lamb…   -0.690    0.0692     -9.97 0        -0.690  -0.409
 7 meaning1 =~… =~    lamb…   -0.393    0.0627     -6.28 3.49e-10 -0.393  -0.264
 8 meaning1 =~… =~    lamb…   -0.331    0.0693     -4.78 1.79e- 6 -0.331  -0.204
 9 meaning1 =~… =~    lamb…   -0.191    0.0648     -2.95 3.14e- 3 -0.191  -0.127
10 meaning1 =~… =~    lamb…   -0.186    0.0678     -2.74 6.18e- 3 -0.186  -0.118
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% 
  mutate(ml01_09_t1_r = ml01_09_t1,
         ml01_10_t1_r = ml01_10_t1,
         ml01_02_t1_r = ml01_02_t1,
         ml01_08_t1_r = ml01_08_t1,
         ml01_07_t1_r = ml01_07_t1,
         ml01_03_t1_r = ml01_03_t1,
         ml01_09_t2_r = ml01_09_t2,
         ml01_10_t2_r = ml01_10_t2,
         ml01_02_t2_r = ml01_02_t2,
         ml01_08_t2_r = ml01_08_t2,
         ml01_07_t2_r = ml01_07_t2,
         ml01_03_t2_r = ml01_03_t2) %>% 
  mutate(across(intersect(starts_with("ml01"), ends_with("_r")), 
                ~ recode(.x, `1` = 7L, `2` = 6L, `3` = 5L, `4` = 4L, `5` = 3L, `6` = 2L, `7` = 1L, .default = NA_integer_))) %>% 
  mutate(meaning_par1_t1 = rowMeans(across(c(ml01_04_t1, ml01_10_t1_r, ml01_07_t1_r, ml01_03_t1_r)), na.rm=T),
         meaning_par2_t1 = rowMeans(across(c(ml01_06_t1, ml01_01_t1, ml01_08_t1_r)), na.rm=T),
         meaning_par3_t1 = rowMeans(across(c(ml01_09_t1_r, ml01_05_t1, ml01_02_t1_r)), na.rm=T),
         meaning_par1_t2 = rowMeans(across(c(ml01_04_t2, ml01_10_t2_r, ml01_07_t2_r, ml01_03_t2_r)), na.rm=T),
         meaning_par2_t2 = rowMeans(across(c(ml01_06_t2, ml01_01_t2, ml01_08_t2_r)), na.rm=T),
         meaning_par3_t2 = rowMeans(across(c(ml01_09_t2_r, ml01_05_t2, ml01_02_t2_r)), na.rm=T))

3.1.2 Self-esteem

Check CFA item loadings at T1

cfa_selfes <- '
# Define the latent factors
selfes1 =~ NA*rs01_01_t1 + lambda1*rs01_01_t1 + lambda2*rs01_02_t1 + lambda3*rs01_03_t1 + lambda4*rs01_04_t1 + lambda5*rs01_05_t1 + lambda6*rs01_06_t1 + lambda7*rs01_07_t1 + lambda8*rs01_08_t1 + lambda9*rs01_09_t1 + lambda10*rs01_10_t1

# Intercepts
rs01_01_t1 ~ i1*1
rs01_02_t1 ~ 1
rs01_03_t1 ~ 1
rs01_04_t1 ~ 1
rs01_05_t1 ~ 1
rs01_06_t1 ~ 1
rs01_07_t1 ~ 1
rs01_08_t1 ~ 1
rs01_09_t1 ~ 1
rs01_10_t1 ~ 1

# Unique Variances
rs01_01_t1 ~~ rs01_01_t1
rs01_02_t1 ~~ rs01_02_t1
rs01_03_t1 ~~ rs01_03_t1
rs01_04_t1 ~~ rs01_04_t1
rs01_05_t1 ~~ rs01_05_t1
rs01_06_t1 ~~ rs01_06_t1
rs01_07_t1 ~~ rs01_07_t1
rs01_08_t1 ~~ rs01_08_t1
rs01_09_t1 ~~ rs01_09_t1
rs01_10_t1 ~~ rs01_10_t1

# Latent Variable Means
selfes1 ~ 0*1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
'
fit_cfa_selfes <- cfa(cfa_selfes, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_cfa_selfes, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 15 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           601         619
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               464.368
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3194.883
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.864
  Tucker-Lewis Index (TLI)                       0.825
                                                      
  Robust Comparative Fit Index (CFI)             0.864
  Robust Tucker-Lewis Index (TLI)                0.825

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -8264.512
  Loglikelihood unrestricted model (H1)      -8032.328
                                                      
  Akaike (AIC)                               16589.024
  Bayesian (BIC)                             16720.982
  Sample-size adjusted Bayesian (SABIC)      16625.740

Root Mean Square Error of Approximation:

  RMSEA                                          0.143
  90 Percent confidence interval - lower         0.131
  90 Percent confidence interval - upper         0.155
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.143
  90 Percent confidence interval - lower         0.131
  90 Percent confidence interval - upper         0.155
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.065

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  selfes1 =~                                          
    r01_01_ (lmb1)    0.897    0.045   20.103    0.000
    r01_02_ (lmb2)   -0.954    0.049  -19.273    0.000
    r01_03_ (lmb3)    0.552    0.036   15.434    0.000
    r01_04_ (lmb4)    0.658    0.039   16.675    0.000
    r01_05_ (lmb5)   -0.890    0.048  -18.547    0.000
    r01_06_ (lmb6)   -1.039    0.048  -21.547    0.000
    r01_07_ (lmb7)    0.721    0.041   17.606    0.000
    r01_08_ (lmb8)   -0.559    0.050  -11.271    0.000
    r01_09_ (lmb9)   -1.110    0.047  -23.715    0.000
    r01_10_ (lm10)    1.023    0.042   24.609    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_1 (i1)    2.952    0.050   58.692    0.000
   .rs01_02_1         3.349    0.055   61.011    0.000
   .rs01_03_1         3.942    0.038  104.394    0.000
   .rs01_04_1         3.772    0.042   89.072    0.000
   .rs01_05_1         2.885    0.053   54.479    0.000
   .rs01_06_1         3.324    0.055   60.195    0.000
   .rs01_07_1         3.637    0.044   81.871    0.000
   .rs01_08_1         3.852    0.050   76.749    0.000
   .rs01_09_1         2.692    0.056   48.476    0.000
   .rs01_10_1         3.181    0.050   63.761    0.000
    selfes1           0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_t1        0.715    0.046   15.490    0.000
   .rs01_02_t1        0.902    0.058   15.468    0.000
   .rs01_03_t1        0.552    0.034   16.295    0.000
   .rs01_04_t1        0.645    0.040   16.146    0.000
   .rs01_05_t1        0.893    0.056   15.889    0.000
   .rs01_06_t1        0.753    0.051   14.661    0.000
   .rs01_07_t1        0.667    0.042   15.914    0.000
   .rs01_08_t1        1.202    0.071   16.905    0.000
   .rs01_09_t1        0.621    0.044   14.096    0.000
   .rs01_10_t1        0.451    0.034   13.448    0.000
    selfes1           1.000                           
tidy(fit_cfa_selfes) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 10 × 11
   term  op    label estimate std.error statistic p.value std.lv std.all std.nox
   <chr> <chr> <chr>    <dbl>     <dbl>     <dbl>   <dbl>  <dbl>   <dbl>   <dbl>
 1 self… =~    lamb…   -1.11     0.0468     -23.7       0 -1.11   -0.816  -0.816
 2 self… =~    lamb…   -1.04     0.0482     -21.5       0 -1.04   -0.767  -0.767
 3 self… =~    lamb…    1.02     0.0416      24.6       0  1.02    0.836   0.836
 4 self… =~    lamb…   -0.954    0.0495     -19.3       0 -0.954  -0.709  -0.709
 5 self… =~    lamb…    0.897    0.0446      20.1       0  0.897   0.728   0.728
 6 self… =~    lamb…   -0.890    0.0480     -18.5       0 -0.890  -0.686  -0.686
 7 self… =~    lamb…    0.721    0.0409      17.6       0  0.721   0.662   0.662
 8 self… =~    lamb…    0.658    0.0394      16.7       0  0.658   0.634   0.634
 9 self… =~    lamb…   -0.559    0.0496     -11.3       0 -0.559  -0.454  -0.454
10 self… =~    lamb…    0.552    0.0358      15.4       0  0.552   0.597   0.597
# ℹ 1 more variable: abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% 
  mutate(rs01_09_t1_r = rs01_09_t1,
         rs01_06_t1_r = rs01_06_t1,
         rs01_02_t1_r = rs01_02_t1,
         rs01_05_t1_r = rs01_05_t1,
         rs01_08_t1_r = rs01_08_t1,
         rs01_09_t2_r = rs01_09_t2,
         rs01_06_t2_r = rs01_06_t2,
         rs01_02_t2_r = rs01_02_t2,
         rs01_05_t2_r = rs01_05_t2,
         rs01_08_t2_r = rs01_08_t2) %>% 
  mutate(across(intersect(starts_with("rs01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(selfes_par1_t1 = rowMeans(across(c(rs01_09_t1_r, rs01_05_t1_r, rs01_08_t1_r, rs01_03_t1)), na.rm=T),
         selfes_par2_t1 = rowMeans(across(c(rs01_06_t1_r, rs01_01_t1, rs01_04_t1)), na.rm=T),
         selfes_par3_t1 = rowMeans(across(c(rs01_10_t1, rs01_02_t1_r, rs01_07_t1)), na.rm=T),
         selfes_par1_t2 = rowMeans(across(c(rs01_09_t2_r, rs01_05_t2_r, rs01_08_t2_r, rs01_03_t2)), na.rm=T),
         selfes_par2_t2 = rowMeans(across(c(rs01_06_t2_r, rs01_01_t2, rs01_04_t2)), na.rm=T),
         selfes_par3_t2 = rowMeans(across(c(rs01_10_t2, rs01_02_t2_r, rs01_07_t2)), na.rm=T))

3.1.3 Self-concept clarity

Check CFA item loadings at T1

cfa_concept <- '
# Define the latent factors
concept1 =~ NA*sc01_01_t1 + lambda1*sc01_01_t1 + lambda2*sc01_02_t1 + lambda3*sc01_03_t1 + lambda4*sc01_04_t1 + lambda5*sc01_05_t1 + lambda6*sc01_06_t1 + lambda7*sc01_07_t1 + lambda8*sc01_08_t1 + lambda9*sc01_09_t1 + lambda10*sc01_10_t1 + lambda11*sc01_11_t1 + lambda12*sc01_12_t1

# Intercepts
sc01_01_t1 ~ i1*1
sc01_02_t1 ~ 1
sc01_03_t1 ~ 1
sc01_04_t1 ~ 1
sc01_05_t1 ~ 1
sc01_06_t1 ~ 1
sc01_07_t1 ~ 1
sc01_08_t1 ~ 1
sc01_09_t1 ~ 1
sc01_10_t1 ~ 1
sc01_11_t1 ~ 1
sc01_12_t1 ~ 1

# Unique Variances
sc01_01_t1 ~~ sc01_01_t1
sc01_02_t1 ~~ sc01_02_t1
sc01_03_t1 ~~ sc01_03_t1
sc01_04_t1 ~~ sc01_04_t1
sc01_05_t1 ~~ sc01_05_t1
sc01_06_t1 ~~ sc01_06_t1
sc01_07_t1 ~~ sc01_07_t1
sc01_08_t1 ~~ sc01_08_t1
sc01_09_t1 ~~ sc01_09_t1
sc01_10_t1 ~~ sc01_10_t1
sc01_11_t1 ~~ sc01_11_t1
sc01_12_t1 ~~ sc01_12_t1

# Latent Variable Means
concept1 ~ 0*1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
'
fit_cfa_concept <- cfa(cfa_concept, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_cfa_concept, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 16 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           601         619
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               399.547
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2957.132
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.880
  Tucker-Lewis Index (TLI)                       0.854
                                                      
  Robust Comparative Fit Index (CFI)             0.880
  Robust Tucker-Lewis Index (TLI)                0.854

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10761.056
  Loglikelihood unrestricted model (H1)     -10561.282
                                                      
  Akaike (AIC)                               21594.112
  Bayesian (BIC)                             21752.462
  Sample-size adjusted Bayesian (SABIC)      21638.171

Root Mean Square Error of Approximation:

  RMSEA                                          0.103
  90 Percent confidence interval - lower         0.094
  90 Percent confidence interval - upper         0.113
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.103
  90 Percent confidence interval - lower         0.094
  90 Percent confidence interval - upper         0.113
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.052

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  concept1 =~                                         
    s01_01_ (lmb1)    0.869    0.046   18.884    0.000
    s01_02_ (lmb2)    0.987    0.049   20.303    0.000
    s01_03_ (lmb3)    0.752    0.050   15.168    0.000
    s01_04_ (lmb4)    0.836    0.050   16.813    0.000
    s01_05_ (lmb5)    0.772    0.052   14.766    0.000
    s01_06_ (lmb6)    0.063    0.051    1.234    0.217
    s01_07_ (lmb7)    0.741    0.053   14.024    0.000
    s01_08_ (lmb8)    1.010    0.045   22.560    0.000
    s01_09_ (lmb9)    1.043    0.048   21.729    0.000
    s01_10_ (lm10)    0.851    0.051   16.630    0.000
    s01_11_ (lm11)   -0.704    0.044  -15.828    0.000
    s01_12_ (lm12)    0.834    0.049   16.919    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_1 (i1)    3.228    0.051   63.692    0.000
   .sc01_02_1         3.448    0.055   63.207    0.000
   .sc01_03_1         3.354    0.052   64.481    0.000
   .sc01_04_1         3.255    0.053   61.123    0.000
   .sc01_05_1         2.958    0.055   54.204    0.000
   .sc01_06_1         2.900    0.048   60.211    0.000
   .sc01_07_1         2.762    0.055   50.396    0.000
   .sc01_08_1         2.727    0.052   52.537    0.000
   .sc01_09_1         2.817    0.055   51.189    0.000
   .sc01_10_1         2.935    0.055   53.765    0.000
   .sc01_11_1         3.206    0.047   68.112    0.000
   .sc01_12_1         3.092    0.053   58.407    0.000
    concept1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_t1        0.788    0.051   15.439    0.000
   .sc01_02_t1        0.814    0.055   14.929    0.000
   .sc01_03_t1        1.062    0.065   16.295    0.000
   .sc01_04_t1        1.004    0.063   15.929    0.000
   .sc01_05_t1        1.195    0.073   16.353    0.000
   .sc01_06_t1        1.390    0.080   17.330    0.000
   .sc01_07_t1        1.256    0.076   16.515    0.000
   .sc01_08_t1        0.599    0.043   13.966    0.000
   .sc01_09_t1        0.732    0.051   14.431    0.000
   .sc01_10_t1        1.067    0.067   15.925    0.000
   .sc01_11_t1        0.836    0.052   16.163    0.000
   .sc01_12_t1        0.988    0.062   15.961    0.000
    concept1          1.000                           
tidy(fit_cfa_concept) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term         op    label estimate std.error statistic p.value  std.lv std.all
   <chr>        <chr> <chr>    <dbl>     <dbl>     <dbl>   <dbl>   <dbl>   <dbl>
 1 concept1 =~… =~    lamb…   1.04      0.0480     21.7    0      1.04    0.773 
 2 concept1 =~… =~    lamb…   1.01      0.0448     22.6    0      1.01    0.794 
 3 concept1 =~… =~    lamb…   0.987     0.0486     20.3    0      0.987   0.738 
 4 concept1 =~… =~    lamb…   0.869     0.0460     18.9    0      0.869   0.700 
 5 concept1 =~… =~    lamb…   0.851     0.0512     16.6    0      0.851   0.636 
 6 concept1 =~… =~    lamb…   0.836     0.0497     16.8    0      0.836   0.641 
 7 concept1 =~… =~    lamb…   0.834     0.0493     16.9    0      0.834   0.643 
 8 concept1 =~… =~    lamb…   0.772     0.0523     14.8    0      0.772   0.577 
 9 concept1 =~… =~    lamb…   0.752     0.0495     15.2    0      0.752   0.589 
10 concept1 =~… =~    lamb…   0.741     0.0528     14.0    0      0.741   0.551 
11 concept1 =~… =~    lamb…  -0.704     0.0445    -15.8    0     -0.704  -0.610 
12 concept1 =~… =~    lamb…   0.0625    0.0507      1.23   0.217  0.0625  0.0529
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% # based on the item content, it makes more sense here to recode all except sc01_11
  mutate(sc01_01_t1_r = sc01_01_t1,
         sc01_02_t1_r = sc01_02_t1,
         sc01_03_t1_r = sc01_03_t1,
         sc01_04_t1_r = sc01_04_t1,
         sc01_05_t1_r = sc01_05_t1,
         sc01_06_t1_r = sc01_06_t1,
         sc01_07_t1_r = sc01_07_t1,
         sc01_08_t1_r = sc01_08_t1,
         sc01_09_t1_r = sc01_09_t1,
         sc01_10_t1_r = sc01_10_t1,
         sc01_12_t1_r = sc01_12_t1,
         sc01_01_t2_r = sc01_01_t2,
         sc01_02_t2_r = sc01_02_t2,
         sc01_03_t2_r = sc01_03_t2,
         sc01_04_t2_r = sc01_04_t2,
         sc01_05_t2_r = sc01_05_t2,
         sc01_06_t2_r = sc01_06_t2,
         sc01_07_t2_r = sc01_07_t2,
         sc01_08_t2_r = sc01_08_t2,
         sc01_09_t2_r = sc01_09_t2,
         sc01_10_t2_r = sc01_10_t2,
         sc01_12_t2_r = sc01_12_t2) %>% 
  mutate(across(intersect(starts_with("sc01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(concept_par1_t1 = rowMeans(across(c(sc01_09_t1_r, sc01_04_t1_r, sc01_03_t1_r, sc01_06_t1_r)), na.rm=T),
         concept_par2_t1 = rowMeans(across(c(sc01_08_t1_r, sc01_10_t1_r, sc01_05_t1_r, sc01_11_t1)), na.rm=T),
         concept_par3_t1 = rowMeans(across(c(sc01_02_t1_r, sc01_01_t1_r, sc01_12_t1_r, sc01_07_t1_r)), na.rm=T),
         concept_par1_t2 = rowMeans(across(c(sc01_09_t2_r, sc01_04_t2_r, sc01_03_t2_r, sc01_06_t2_r)), na.rm=T),
         concept_par2_t2 = rowMeans(across(c(sc01_08_t2_r, sc01_10_t2_r, sc01_05_t2_r, sc01_11_t2)), na.rm=T),
         concept_par3_t2 = rowMeans(across(c(sc01_02_t2_r, sc01_01_t2_r, sc01_12_t2_r, sc01_07_t2_r)), na.rm=T))

3.2 Big Five

Show the code
df_sbsa_wide_pers <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("bf05", "bf06"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("bf05", "bf06")))
# colnames(df_sbsa_wide_pers)

3.2.1 Extraversion - current self

Check CFA item loadings at T1

cfa_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*bf05_01_t1 + lambda1*bf05_01_t1 + lambda2*bf05_06_t1 + lambda3*bf05_11_t1 + lambda4*bf05_16_t1 + lambda5*bf05_21_t1 + lambda6*bf05_26_t1 + lambda7*bf05_31_t1 + lambda8*bf05_36_t1 + lambda9*bf05_41_t1 + lambda10*bf05_46_t1 + lambda11*bf05_51_t1 + lambda12*bf05_56_t1

# Intercepts
bf05_01_t1 ~ i1*1
bf05_06_t1 ~ 1
bf05_11_t1 ~ 1
bf05_16_t1 ~ 1
bf05_21_t1 ~ 1
bf05_26_t1 ~ 1
bf05_31_t1 ~ 1
bf05_36_t1 ~ 1
bf05_41_t1 ~ 1
bf05_46_t1 ~ 1
bf05_51_t1 ~ 1
bf05_56_t1 ~ 1

# Unique Variances
bf05_01_t1 ~~ bf05_01_t1
bf05_06_t1 ~~ bf05_06_t1
bf05_11_t1 ~~ bf05_11_t1
bf05_16_t1 ~~ bf05_16_t1
bf05_21_t1 ~~ bf05_21_t1
bf05_26_t1 ~~ bf05_26_t1
bf05_31_t1 ~~ bf05_31_t1
bf05_36_t1 ~~ bf05_36_t1
bf05_41_t1 ~~ bf05_41_t1
bf05_46_t1 ~~ bf05_46_t1
bf05_51_t1 ~~ bf05_51_t1
bf05_56_t1 ~~ bf05_56_t1

# Latent Variable Means
extra_curr1 ~ 0*1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
'
fit_cfa_extra_curr <- cfa(cfa_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_extra_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 33 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               583.950
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2202.791
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.752
  Tucker-Lewis Index (TLI)                       0.697
                                                      
  Robust Comparative Fit Index (CFI)             0.752
  Robust Tucker-Lewis Index (TLI)                0.697

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10842.748
  Loglikelihood unrestricted model (H1)     -10550.773
                                                      
  Akaike (AIC)                               21757.497
  Bayesian (BIC)                             21916.322
  Sample-size adjusted Bayesian (SABIC)      21802.030

Root Mean Square Error of Approximation:

  RMSEA                                          0.127
  90 Percent confidence interval - lower         0.118
  90 Percent confidence interval - upper         0.136
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.127
  90 Percent confidence interval - lower         0.118
  90 Percent confidence interval - upper         0.136
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.075

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_curr1 =~                                      
    b05_01_ (lmb1)    0.920    0.048   19.020    0.000
    b05_06_ (lmb2)    0.546    0.046   11.929    0.000
    b05_11_ (lmb3)   -0.324    0.050   -6.473    0.000
    b05_16_ (lmb4)   -0.672    0.046  -14.449    0.000
    b05_21_ (lmb5)    0.711    0.052   13.752    0.000
    b05_26_ (lmb6)   -0.591    0.056  -10.546    0.000
    b05_31_ (lmb7)   -0.704    0.042  -16.598    0.000
    b05_36_ (lmb8)   -0.518    0.047  -10.999    0.000
    b05_41_ (lmb9)    0.750    0.047   15.814    0.000
    b05_46_ (lm10)    0.854    0.051   16.684    0.000
    b05_51_ (lm11)   -0.567    0.051  -11.196    0.000
    b05_56_ (lm12)    0.634    0.045   14.200    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_1 (i1)    2.690    0.052   51.737    0.000
   .bf05_06_1         3.036    0.045   67.283    0.000
   .bf05_11_1         2.670    0.047   56.898    0.000
   .bf05_16_1         3.837    0.046   82.994    0.000
   .bf05_21_1         2.665    0.052   51.435    0.000
   .bf05_26_1         3.125    0.054   58.000    0.000
   .bf05_31_1         4.046    0.044   92.426    0.000
   .bf05_36_1         3.166    0.046   68.934    0.000
   .bf05_41_1         2.848    0.048   58.902    0.000
   .bf05_46_1         2.962    0.053   55.829    0.000
   .bf05_51_1         3.174    0.049   64.449    0.000
   .bf05_56_1         3.222    0.045   71.975    0.000
    extr_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_t1        0.800    0.057   14.102    0.000
   .bf05_06_t1        0.942    0.057   16.460    0.000
   .bf05_11_t1        1.236    0.072   17.175    0.000
   .bf05_16_t1        0.851    0.056   15.317    0.000
   .bf05_21_t1        1.129    0.071   15.953    0.000
   .bf05_26_t1        1.419    0.086   16.564    0.000
   .bf05_31_t1        0.672    0.045   14.826    0.000
   .bf05_36_t1        1.016    0.061   16.611    0.000
   .bf05_41_t1        0.859    0.057   15.000    0.000
   .bf05_46_t1        0.985    0.066   14.901    0.000
   .bf05_51_t1        1.156    0.070   16.504    0.000
   .bf05_56_t1        0.819    0.052   15.724    0.000
    extra_curr1       1.000                           
tidy(fit_cfa_extra_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term         op    label estimate std.error statistic  p.value std.lv std.all
   <chr>        <chr> <chr>    <dbl>     <dbl>     <dbl>    <dbl>  <dbl>   <dbl>
 1 extra_curr1… =~    lamb…    0.920    0.0484     19.0  0         0.920   0.717
 2 extra_curr1… =~    lamb…    0.854    0.0512     16.7  0         0.854   0.652
 3 extra_curr1… =~    lamb…    0.750    0.0474     15.8  0         0.750   0.629
 4 extra_curr1… =~    lamb…    0.711    0.0517     13.8  0         0.711   0.556
 5 extra_curr1… =~    lamb…   -0.704    0.0424    -16.6  0        -0.704  -0.651
 6 extra_curr1… =~    lamb…   -0.672    0.0465    -14.4  0        -0.672  -0.589
 7 extra_curr1… =~    lamb…    0.634    0.0446     14.2  0         0.634   0.574
 8 extra_curr1… =~    lamb…   -0.591    0.0560    -10.5  0        -0.591  -0.444
 9 extra_curr1… =~    lamb…   -0.567    0.0506    -11.2  0        -0.567  -0.466
10 extra_curr1… =~    lamb…    0.546    0.0458     11.9  0         0.546   0.490
11 extra_curr1… =~    lamb…   -0.518    0.0471    -11.0  0        -0.518  -0.457
12 extra_curr1… =~    lamb…   -0.324    0.0500     -6.47 9.63e-11 -0.324  -0.280
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_31_t1_r = bf05_31_t1,
         bf05_16_t1_r = bf05_16_t1,
         bf05_26_t1_r = bf05_26_t1,
         bf05_51_t1_r = bf05_51_t1,
         bf05_36_t1_r = bf05_36_t1,
         bf05_11_t1_r = bf05_11_t1,
         bf05_31_t2_r = bf05_31_t2,
         bf05_16_t2_r = bf05_16_t2,
         bf05_26_t2_r = bf05_26_t2,
         bf05_51_t2_r = bf05_51_t2,
         bf05_36_t2_r = bf05_36_t2,
         bf05_11_t2_r = bf05_11_t2) %>% 
  mutate(across(c(bf05_31_t1_r, bf05_16_t1_r, bf05_26_t1_r, bf05_51_t1_r, bf05_36_t1_r, bf05_11_t1_r, 
                  bf05_31_t2_r, bf05_16_t2_r, bf05_26_t2_r, bf05_51_t2_r, bf05_36_t2_r, bf05_11_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_curr_par1_t1 = rowMeans(across(c(bf05_01_t1, bf05_16_t1_r, bf05_51_t1_r, bf05_11_t1_r)), na.rm=T),
         extra_curr_par2_t1 = rowMeans(across(c(bf05_46_t1, bf05_31_t1_r, bf05_26_t1_r, bf05_36_t1_r)), na.rm=T),
         extra_curr_par3_t1 = rowMeans(across(c(bf05_41_t1, bf05_21_t1, bf05_56_t1, bf05_06_t1)), na.rm=T),
         extra_curr_par1_t2 = rowMeans(across(c(bf05_01_t2, bf05_16_t2_r, bf05_51_t2_r, bf05_11_t2_r)), na.rm=T),
         extra_curr_par2_t2 = rowMeans(across(c(bf05_46_t2, bf05_31_t2_r, bf05_26_t2_r, bf05_36_t2_r)), na.rm=T),
         extra_curr_par3_t2 = rowMeans(across(c(bf05_41_t2, bf05_21_t2, bf05_56_t2, bf05_06_t2)), na.rm=T))

3.2.2 Extraversion - ideal self

Check CFA item loadings at T1

cfa_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*bf06_01_t1 + lambda1*bf06_01_t1 + lambda2*bf06_06_t1 + lambda3*bf06_11_t1 + lambda4*bf06_16_t1 + lambda5*bf06_21_t1 + lambda6*bf06_26_t1 + lambda7*bf06_31_t1 + lambda8*bf06_36_t1 + lambda9*bf06_41_t1 + lambda10*bf06_46_t1 + lambda11*bf06_51_t1 + lambda12*bf06_56_t1

# Intercepts
bf06_01_t1 ~ i1*1
bf06_06_t1 ~ 1
bf06_11_t1 ~ 1
bf06_16_t1 ~ 1
bf06_21_t1 ~ 1
bf06_26_t1 ~ 1
bf06_31_t1 ~ 1
bf06_36_t1 ~ 1
bf06_41_t1 ~ 1
bf06_46_t1 ~ 1
bf06_51_t1 ~ 1
bf06_56_t1 ~ 1

# Unique Variances
bf06_01_t1 ~~ bf06_01_t1
bf06_06_t1 ~~ bf06_06_t1
bf06_11_t1 ~~ bf06_11_t1
bf06_16_t1 ~~ bf06_16_t1
bf06_21_t1 ~~ bf06_21_t1
bf06_26_t1 ~~ bf06_26_t1
bf06_31_t1 ~~ bf06_31_t1
bf06_36_t1 ~~ bf06_36_t1
bf06_41_t1 ~~ bf06_41_t1
bf06_46_t1 ~~ bf06_46_t1
bf06_51_t1 ~~ bf06_51_t1
bf06_56_t1 ~~ bf06_56_t1

# Latent Variable Means
extra_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
'
fit_cfa_extra_ideal <- cfa(cfa_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_extra_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 18 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               272.217
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                               971.578
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.759
  Tucker-Lewis Index (TLI)                       0.705
                                                      
  Robust Comparative Fit Index (CFI)             0.759
  Robust Tucker-Lewis Index (TLI)                0.705

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10004.455
  Loglikelihood unrestricted model (H1)      -9868.347
                                                      
  Akaike (AIC)                               20080.911
  Bayesian (BIC)                             20239.736
  Sample-size adjusted Bayesian (SABIC)      20125.444

Root Mean Square Error of Approximation:

  RMSEA                                          0.081
  90 Percent confidence interval - lower         0.072
  90 Percent confidence interval - upper         0.091
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.610
                                                      
  Robust RMSEA                                   0.081
  90 Percent confidence interval - lower         0.072
  90 Percent confidence interval - upper         0.091
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.610

Standardized Root Mean Square Residual:

  SRMR                                           0.058

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_ideal1 =~                                     
    b06_01_ (lmb1)    0.312    0.036    8.578    0.000
    b06_06_ (lmb2)    0.333    0.045    7.479    0.000
    b06_11_ (lmb3)   -0.263    0.065   -4.054    0.000
    b06_16_ (lmb4)   -0.500    0.055   -9.081    0.000
    b06_21_ (lmb5)    0.498    0.050   10.025    0.000
    b06_26_ (lmb6)   -0.482    0.042  -11.509    0.000
    b06_31_ (lmb7)   -0.537    0.048  -11.182    0.000
    b06_36_ (lmb8)   -0.470    0.048   -9.759    0.000
    b06_41_ (lmb9)    0.397    0.033   11.985    0.000
    b06_46_ (lm10)    0.282    0.050    5.618    0.000
    b06_51_ (lm11)   -0.516    0.047  -10.947    0.000
    b06_56_ (lm12)    0.362    0.037    9.874    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_1 (i1)    4.241    0.032  132.589    0.000
   .bf06_06_1         4.080    0.039  103.807    0.000
   .bf06_11_1         2.402    0.056   42.984    0.000
   .bf06_16_1         2.887    0.048   59.976    0.000
   .bf06_21_1         3.770    0.044   85.223    0.000
   .bf06_26_1         1.700    0.038   44.873    0.000
   .bf06_31_1         2.166    0.043   50.204    0.000
   .bf06_36_1         2.189    0.043   50.699    0.000
   .bf06_41_1         4.442    0.030  147.093    0.000
   .bf06_46_1         3.764    0.043   87.258    0.000
   .bf06_51_1         2.401    0.043   56.388    0.000
   .bf06_56_1         4.235    0.033  129.694    0.000
    extra_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_t1        0.526    0.032   16.193    0.000
   .bf06_06_t1        0.830    0.050   16.600    0.000
   .bf06_11_t1        1.833    0.107   17.203    0.000
   .bf06_16_t1        1.161    0.073   15.875    0.000
   .bf06_21_t1        0.944    0.060   15.663    0.000
   .bf06_26_t1        0.641    0.043   14.994    0.000
   .bf06_31_t1        0.845    0.056   15.085    0.000
   .bf06_36_t1        0.914    0.058   15.891    0.000
   .bf06_41_t1        0.397    0.027   14.820    0.000
   .bf06_46_t1        1.053    0.062   16.920    0.000
   .bf06_51_t1        0.838    0.055   15.368    0.000
   .bf06_56_t1        0.518    0.033   15.736    0.000
    extra_ideal1      1.000                           
tidy(fit_cfa_extra_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term         op    label estimate std.error statistic  p.value std.lv std.all
   <chr>        <chr> <chr>    <dbl>     <dbl>     <dbl>    <dbl>  <dbl>   <dbl>
 1 extra_ideal… =~    lamb…   -0.537    0.0481    -11.2  0        -0.537  -0.505
 2 extra_ideal… =~    lamb…   -0.516    0.0471    -10.9  0        -0.516  -0.491
 3 extra_ideal… =~    lamb…   -0.500    0.0551     -9.08 0        -0.500  -0.421
 4 extra_ideal… =~    lamb…    0.498    0.0497     10.0  0         0.498   0.456
 5 extra_ideal… =~    lamb…   -0.482    0.0419    -11.5  0        -0.482  -0.516
 6 extra_ideal… =~    lamb…   -0.470    0.0482     -9.76 0        -0.470  -0.441
 7 extra_ideal… =~    lamb…    0.397    0.0332     12.0  0         0.397   0.533
 8 extra_ideal… =~    lamb…    0.362    0.0367      9.87 0         0.362   0.449
 9 extra_ideal… =~    lamb…    0.333    0.0446      7.48 7.53e-14  0.333   0.344
10 extra_ideal… =~    lamb…    0.312    0.0363      8.58 0         0.312   0.395
11 extra_ideal… =~    lamb…    0.282    0.0502      5.62 1.93e- 8  0.282   0.265
12 extra_ideal… =~    lamb…   -0.263    0.0649     -4.05 5.04e- 5 -0.263  -0.191
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_31_t1_r = bf06_31_t1,
         bf06_16_t1_r = bf06_16_t1,
         bf06_26_t1_r = bf06_26_t1,
         bf06_51_t1_r = bf06_51_t1,
         bf06_36_t1_r = bf06_36_t1,
         bf06_11_t1_r = bf06_11_t1,
         bf06_31_t2_r = bf06_31_t2,
         bf06_16_t2_r = bf06_16_t2,
         bf06_26_t2_r = bf06_26_t2,
         bf06_51_t2_r = bf06_51_t2,
         bf06_36_t2_r = bf06_36_t2,
         bf06_11_t2_r = bf06_11_t2) %>% 
  mutate(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_26_t1_r, bf06_51_t1_r, bf06_36_t1_r, bf06_11_t1_r, 
                  bf06_31_t2_r, bf06_16_t2_r, bf06_26_t2_r, bf06_51_t2_r, bf06_36_t2_r, bf06_11_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_ideal_par1_t1 = rowMeans(across(c(bf06_31_t1_r, bf06_36_t1_r, bf06_06_t1, bf06_11_t1_r)), na.rm=T),
         extra_ideal_par2_t1 = rowMeans(across(c(bf06_51_t1_r, bf06_26_t1_r, bf06_56_t1, bf06_46_t1)), na.rm=T),
         extra_ideal_par3_t1 = rowMeans(across(c(bf06_16_t1_r, bf06_21_t1, bf06_41_t1, bf06_01_t1)), na.rm=T),
         extra_ideal_par1_t2 = rowMeans(across(c(bf06_31_t2_r, bf06_36_t2_r, bf06_06_t2, bf06_11_t2_r)), na.rm=T),
         extra_ideal_par2_t2 = rowMeans(across(c(bf06_51_t2_r, bf06_26_t2_r, bf06_56_t2, bf06_46_t2)), na.rm=T),
         extra_ideal_par3_t2 = rowMeans(across(c(bf06_16_t2_r, bf06_21_t2, bf06_41_t2, bf06_01_t2)), na.rm=T))

3.2.3 Agreeableness - current self

Check CFA item loadings at T1

cfa_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*bf05_02_t1 + lambda1*bf05_02_t1 + lambda2*bf05_07_t1 + lambda3*bf05_12_t1 + lambda4*bf05_17_t1 + lambda5*bf05_22_t1 + lambda6*bf05_27_t1 + lambda7*bf05_32_t1 + lambda8*bf05_37_t1 + lambda9*bf05_42_t1 + lambda10*bf05_47_t1 + lambda11*bf05_52_t1 + lambda12*bf05_57_t1

# Intercepts
bf05_02_t1 ~ i1*1
bf05_07_t1 ~ 1
bf05_12_t1 ~ 1
bf05_17_t1 ~ 1
bf05_22_t1 ~ 1
bf05_27_t1 ~ 1
bf05_32_t1 ~ 1
bf05_37_t1 ~ 1
bf05_42_t1 ~ 1
bf05_47_t1 ~ 1
bf05_52_t1 ~ 1
bf05_57_t1 ~ 1

# Unique Variances
bf05_02_t1 ~~ bf05_02_t1
bf05_07_t1 ~~ bf05_07_t1
bf05_12_t1 ~~ bf05_12_t1
bf05_17_t1 ~~ bf05_17_t1
bf05_22_t1 ~~ bf05_22_t1
bf05_27_t1 ~~ bf05_27_t1
bf05_32_t1 ~~ bf05_32_t1
bf05_37_t1 ~~ bf05_37_t1
bf05_42_t1 ~~ bf05_42_t1
bf05_47_t1 ~~ bf05_47_t1
bf05_52_t1 ~~ bf05_52_t1
bf05_57_t1 ~~ bf05_57_t1

# Latent Variable Means
agree_curr1 ~ 0*1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
'
fit_cfa_agree_curr <- cfa(cfa_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_agree_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 38 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               340.898
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1566.932
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.809
  Tucker-Lewis Index (TLI)                       0.766
                                                      
  Robust Comparative Fit Index (CFI)             0.809
  Robust Tucker-Lewis Index (TLI)                0.767

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10405.768
  Loglikelihood unrestricted model (H1)     -10235.319
                                                      
  Akaike (AIC)                               20883.537
  Bayesian (BIC)                             21042.362
  Sample-size adjusted Bayesian (SABIC)      20928.070

Root Mean Square Error of Approximation:

  RMSEA                                          0.093
  90 Percent confidence interval - lower         0.084
  90 Percent confidence interval - upper         0.103
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.990
                                                      
  Robust RMSEA                                   0.093
  90 Percent confidence interval - lower         0.084
  90 Percent confidence interval - upper         0.103
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.990

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_curr1 =~                                      
    b05_02_ (lmb1)    0.536    0.038   14.080    0.000
    b05_07_ (lmb2)    0.460    0.031   14.902    0.000
    b05_12_ (lmb3)   -0.576    0.052  -10.992    0.000
    b05_17_ (lmb4)   -0.269    0.063   -4.243    0.000
    b05_22_ (lmb5)   -0.631    0.051  -12.269    0.000
    b05_27_ (lmb6)    0.593    0.050   11.760    0.000
    b05_32_ (lmb7)    0.470    0.037   12.637    0.000
    b05_37_ (lmb8)   -0.748    0.052  -14.490    0.000
    b05_42_ (lmb9)   -0.335    0.051   -6.538    0.000
    b05_47_ (lm10)   -0.756    0.052  -14.455    0.000
    b05_52_ (lm11)    0.483    0.033   14.600    0.000
    b05_57_ (lm12)    0.583    0.051   11.464    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_1 (i1)    4.143    0.038  110.368    0.000
   .bf05_07_1         4.435    0.031  143.894    0.000
   .bf05_12_1         2.943    0.050   58.794    0.000
   .bf05_17_1         2.796    0.058   48.465    0.000
   .bf05_22_1         2.311    0.050   46.542    0.000
   .bf05_27_1         3.633    0.048   74.910    0.000
   .bf05_32_1         3.938    0.036  108.668    0.000
   .bf05_37_1         2.594    0.051   50.762    0.000
   .bf05_42_1         3.588    0.047   76.889    0.000
   .bf05_47_1         2.461    0.052   47.324    0.000
   .bf05_52_1         4.229    0.033  128.738    0.000
   .bf05_57_1         3.105    0.049   63.917    0.000
    agre_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_t1        0.570    0.037   15.301    0.000
   .bf05_07_t1        0.366    0.024   15.029    0.000
   .bf05_12_t1        1.194    0.073   16.304    0.000
   .bf05_17_t1        1.955    0.113   17.303    0.000
   .bf05_22_t1        1.102    0.069   15.896    0.000
   .bf05_27_t1        1.078    0.067   16.072    0.000
   .bf05_32_t1        0.578    0.036   15.889    0.000
   .bf05_37_t1        1.031    0.068   15.138    0.000
   .bf05_42_t1        1.214    0.071   17.032    0.000
   .bf05_47_t1        1.076    0.070   15.292    0.000
   .bf05_52_t1        0.423    0.028   15.139    0.000
   .bf05_57_t1        1.098    0.068   16.112    0.000
    agree_curr1       1.000                           
tidy(fit_cfa_agree_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term         op    label estimate std.error statistic  p.value std.lv std.all
   <chr>        <chr> <chr>    <dbl>     <dbl>     <dbl>    <dbl>  <dbl>   <dbl>
 1 agree_curr1… =~    lamb…   -0.756    0.0523    -14.5  0        -0.756  -0.589
 2 agree_curr1… =~    lamb…   -0.748    0.0516    -14.5  0        -0.748  -0.593
 3 agree_curr1… =~    lamb…   -0.631    0.0514    -12.3  0        -0.631  -0.515
 4 agree_curr1… =~    lamb…    0.593    0.0504     11.8  0         0.593   0.496
 5 agree_curr1… =~    lamb…    0.583    0.0508     11.5  0         0.583   0.486
 6 agree_curr1… =~    lamb…   -0.576    0.0524    -11.0  0        -0.576  -0.466
 7 agree_curr1… =~    lamb…    0.536    0.0381     14.1  0         0.536   0.579
 8 agree_curr1… =~    lamb…    0.483    0.0331     14.6  0         0.483   0.596
 9 agree_curr1… =~    lamb…    0.470    0.0372     12.6  0         0.470   0.526
10 agree_curr1… =~    lamb…    0.460    0.0309     14.9  0         0.460   0.606
11 agree_curr1… =~    lamb…   -0.335    0.0512     -6.54 6.23e-11 -0.335  -0.291
12 agree_curr1… =~    lamb…   -0.269    0.0633     -4.24 2.20e- 5 -0.269  -0.189
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_47_t1_r = bf05_47_t1,
         bf05_37_t1_r = bf05_37_t1,
         bf05_22_t1_r = bf05_22_t1,
         bf05_12_t1_r = bf05_12_t1,
         bf05_42_t1_r = bf05_42_t1,
         bf05_17_t1_r = bf05_17_t1,
         bf05_47_t2_r = bf05_47_t2,
         bf05_37_t2_r = bf05_37_t2,
         bf05_22_t2_r = bf05_22_t2,
         bf05_12_t2_r = bf05_12_t2,
         bf05_42_t2_r = bf05_42_t2,
         bf05_17_t2_r = bf05_17_t2) %>% 
  mutate(across(c(bf05_47_t1_r, bf05_37_t1_r, bf05_22_t1_r, bf05_12_t1_r, bf05_42_t1_r, bf05_17_t1_r, 
                  bf05_47_t2_r, bf05_37_t2_r, bf05_22_t2_r, bf05_12_t2_r, bf05_42_t2_r, bf05_17_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_curr_par1_t1 = rowMeans(across(c(bf05_47_t1_r, bf05_12_t1_r, bf05_32_t1, bf05_17_t1)), na.rm=T),
         agree_curr_par2_t1 = rowMeans(across(c(bf05_37_t1_r, bf05_57_t1, bf05_52_t1, bf05_42_t1)), na.rm=T),
         agree_curr_par3_t1 = rowMeans(across(c(bf05_22_t1_r, bf05_27_t1, bf05_02_t1, bf05_07_t1)), na.rm=T),
         agree_curr_par1_t2 = rowMeans(across(c(bf05_47_t2_r, bf05_12_t2_r, bf05_32_t2, bf05_17_t2)), na.rm=T),
         agree_curr_par2_t2 = rowMeans(across(c(bf05_37_t2_r, bf05_57_t2, bf05_52_t2, bf05_42_t2)), na.rm=T),
         agree_curr_par3_t2 = rowMeans(across(c(bf05_22_t2_r, bf05_27_t2, bf05_02_t2, bf05_07_t2)), na.rm=T))

3.2.4 Agreeableness - ideal self

Check CFA item loadings at T1

cfa_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*bf06_02_t1 + lambda1*bf06_02_t1 + lambda2*bf06_07_t1 + lambda3*bf06_12_t1 + lambda4*bf06_17_t1 + lambda5*bf06_22_t1 + lambda6*bf06_27_t1 + lambda7*bf06_32_t1 + lambda8*bf06_37_t1 + lambda9*bf06_42_t1 + lambda10*bf06_47_t1 + lambda11*bf06_52_t1 + lambda12*bf06_57_t1

# Intercepts
bf06_02_t1 ~ i1*1
bf06_07_t1 ~ 1
bf06_12_t1 ~ 1
bf06_17_t1 ~ 1
bf06_22_t1 ~ 1
bf06_27_t1 ~ 1
bf06_32_t1 ~ 1
bf06_37_t1 ~ 1
bf06_42_t1 ~ 1
bf06_47_t1 ~ 1
bf06_52_t1 ~ 1
bf06_57_t1 ~ 1

# Unique Variances
bf06_02_t1 ~~ bf06_02_t1
bf06_07_t1 ~~ bf06_07_t1
bf06_12_t1 ~~ bf06_12_t1
bf06_17_t1 ~~ bf06_17_t1
bf06_22_t1 ~~ bf06_22_t1
bf06_27_t1 ~~ bf06_27_t1
bf06_32_t1 ~~ bf06_32_t1
bf06_37_t1 ~~ bf06_37_t1
bf06_42_t1 ~~ bf06_42_t1
bf06_47_t1 ~~ bf06_47_t1
bf06_52_t1 ~~ bf06_52_t1
bf06_57_t1 ~~ bf06_57_t1

# Latent Variable Means
agree_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
'
fit_cfa_agree_ideal <- cfa(cfa_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_agree_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 42 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               179.193
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1384.060
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.905
  Tucker-Lewis Index (TLI)                       0.884
                                                      
  Robust Comparative Fit Index (CFI)             0.905
  Robust Tucker-Lewis Index (TLI)                0.884

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -9707.113
  Loglikelihood unrestricted model (H1)      -9617.516
                                                      
  Akaike (AIC)                               19486.225
  Bayesian (BIC)                             19645.051
  Sample-size adjusted Bayesian (SABIC)      19530.759

Root Mean Square Error of Approximation:

  RMSEA                                          0.062
  90 Percent confidence interval - lower         0.052
  90 Percent confidence interval - upper         0.072
  P-value H_0: RMSEA <= 0.050                    0.026
  P-value H_0: RMSEA >= 0.080                    0.001
                                                      
  Robust RMSEA                                   0.062
  90 Percent confidence interval - lower         0.052
  90 Percent confidence interval - upper         0.072
  P-value H_0: Robust RMSEA <= 0.050             0.026
  P-value H_0: Robust RMSEA >= 0.080             0.001

Standardized Root Mean Square Residual:

  SRMR                                           0.043

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_ideal1 =~                                     
    b06_02_ (lmb1)    0.520    0.037   14.060    0.000
    b06_07_ (lmb2)    0.343    0.029   11.805    0.000
    b06_12_ (lmb3)   -0.382    0.043   -8.965    0.000
    b06_17_ (lmb4)   -0.145    0.069   -2.090    0.037
    b06_22_ (lmb5)   -0.412    0.047   -8.711    0.000
    b06_27_ (lmb6)    0.616    0.043   14.369    0.000
    b06_32_ (lmb7)    0.485    0.039   12.338    0.000
    b06_37_ (lmb8)   -0.537    0.038  -14.218    0.000
    b06_42_ (lmb9)   -0.435    0.051   -8.594    0.000
    b06_47_ (lm10)   -0.670    0.044  -15.070    0.000
    b06_52_ (lm11)    0.465    0.030   15.645    0.000
    b06_57_ (lm12)    0.584    0.041   14.190    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_1 (i1)    4.256    0.037  116.146    0.000
   .bf06_07_1         4.635    0.028  166.038    0.000
   .bf06_12_1         1.943    0.040   48.580    0.000
   .bf06_17_1         2.787    0.063   44.409    0.000
   .bf06_22_1         1.920    0.044   43.295    0.000
   .bf06_27_1         3.941    0.043   92.620    0.000
   .bf06_32_1         4.280    0.038  111.967    0.000
   .bf06_37_1         1.704    0.037   45.484    0.000
   .bf06_42_1         2.765    0.047   58.543    0.000
   .bf06_47_1         1.865    0.045   41.903    0.000
   .bf06_52_1         4.479    0.030  149.271    0.000
   .bf06_57_1         3.693    0.041   90.499    0.000
    agree_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_t1        0.547    0.035   15.467    0.000
   .bf06_07_t1        0.357    0.022   16.080    0.000
   .bf06_12_t1        0.828    0.049   16.744    0.000
   .bf06_17_t1        2.377    0.136   17.415    0.000
   .bf06_22_t1        1.027    0.061   16.778    0.000
   .bf06_27_t1        0.722    0.047   15.305    0.000
   .bf06_32_t1        0.653    0.041   15.988    0.000
   .bf06_37_t1        0.566    0.037   15.378    0.000
   .bf06_42_t1        1.169    0.070   16.771    0.000
   .bf06_47_t1        0.757    0.050   15.020    0.000
   .bf06_52_t1        0.332    0.022   14.812    0.000
   .bf06_57_t1        0.673    0.044   15.384    0.000
    agree_ideal1      1.000                           
tidy(fit_cfa_agree_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term  op    label estimate std.error statistic p.value std.lv std.all std.nox
   <chr> <chr> <chr>    <dbl>     <dbl>     <dbl>   <dbl>  <dbl>   <dbl>   <dbl>
 1 agre… =~    lamb…   -0.670    0.0445    -15.1   0      -0.670 -0.610  -0.610 
 2 agre… =~    lamb…    0.616    0.0428     14.4   0       0.616  0.587   0.587 
 3 agre… =~    lamb…    0.584    0.0412     14.2   0       0.584  0.580   0.580 
 4 agre… =~    lamb…   -0.537    0.0378    -14.2   0      -0.537 -0.581  -0.581 
 5 agre… =~    lamb…    0.520    0.0370     14.1   0       0.520  0.575   0.575 
 6 agre… =~    lamb…    0.485    0.0393     12.3   0       0.485  0.515   0.515 
 7 agre… =~    lamb…    0.465    0.0297     15.6   0       0.465  0.628   0.628 
 8 agre… =~    lamb…   -0.435    0.0506     -8.59  0      -0.435 -0.373  -0.373 
 9 agre… =~    lamb…   -0.412    0.0474     -8.71  0      -0.412 -0.377  -0.377 
10 agre… =~    lamb…   -0.382    0.0426     -8.96  0      -0.382 -0.387  -0.387 
11 agre… =~    lamb…    0.343    0.0290     11.8   0       0.343  0.497   0.497 
12 agre… =~    lamb…   -0.145    0.0693     -2.09  0.0366 -0.145 -0.0935 -0.0935
# ℹ 1 more variable: abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_47_t1_r = bf06_47_t1,
         bf06_37_t1_r = bf06_37_t1,
         bf06_22_t1_r = bf06_22_t1,
         bf06_12_t1_r = bf06_12_t1,
         bf06_42_t1_r = bf06_42_t1,
         bf06_17_t1_r = bf06_17_t1,
         bf06_47_t2_r = bf06_47_t2,
         bf06_37_t2_r = bf06_37_t2,
         bf06_22_t2_r = bf06_22_t2,
         bf06_12_t2_r = bf06_12_t2,
         bf06_42_t2_r = bf06_42_t2,
         bf06_17_t2_r = bf06_17_t2) %>% 
  mutate(across(c(bf06_47_t1_r, bf06_37_t1_r, bf06_22_t1_r, bf06_12_t1_r, bf06_42_t1_r, bf06_17_t1_r, 
                  bf06_47_t2_r, bf06_37_t2_r, bf06_22_t2_r, bf06_12_t2_r, bf06_42_t2_r, bf06_17_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_ideal_par1_t1 = rowMeans(across(c(bf06_47_t1_r, bf06_32_t1, bf06_22_t1_r, bf06_17_t1_r)), na.rm=T),
         agree_ideal_par2_t1 = rowMeans(across(c(bf06_27_t1, bf06_02_t1, bf06_42_t1_r, bf06_07_t1)), na.rm=T),
         agree_ideal_par3_t1 = rowMeans(across(c(bf06_57_t1, bf06_37_t1_r, bf06_52_t1, bf06_12_t1_r)), na.rm=T),
         agree_ideal_par1_t2 = rowMeans(across(c(bf06_47_t2_r, bf06_32_t2, bf06_22_t2_r, bf06_17_t2_r)), na.rm=T),
         agree_ideal_par2_t2 = rowMeans(across(c(bf06_27_t2, bf06_02_t2, bf06_42_t2_r, bf06_07_t2)), na.rm=T),
         agree_ideal_par3_t2 = rowMeans(across(c(bf06_57_t2, bf06_37_t2_r, bf06_52_t2, bf06_12_t2_r)), na.rm=T))

3.2.5 Conscientiousness - current self

Check CFA item loadings at T1

cfa_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*bf05_03_t1 + lambda1*bf05_03_t1 + lambda2*bf05_08_t1 + lambda3*bf05_13_t1 + lambda4*bf05_18_t1 + lambda5*bf05_23_t1 + lambda6*bf05_28_t1 + lambda7*bf05_33_t1 + lambda8*bf05_38_t1 + lambda9*bf05_43_t1 + lambda10*bf05_48_t1 + lambda11*bf05_53_t1 + lambda12*bf05_58_t1
# Intercepts
bf05_03_t1 ~ i1*1
bf05_08_t1 ~ 1
bf05_13_t1 ~ 1
bf05_18_t1 ~ 1
bf05_23_t1 ~ 1
bf05_28_t1 ~ 1
bf05_33_t1 ~ 1
bf05_38_t1 ~ 1
bf05_43_t1 ~ 1
bf05_48_t1 ~ 1
bf05_53_t1 ~ 1
bf05_58_t1 ~ 1

# Unique Variances
bf05_03_t1 ~~ bf05_03_t1
bf05_08_t1 ~~ bf05_08_t1
bf05_13_t1 ~~ bf05_13_t1
bf05_18_t1 ~~ bf05_18_t1
bf05_23_t1 ~~ bf05_23_t1
bf05_28_t1 ~~ bf05_28_t1
bf05_33_t1 ~~ bf05_33_t1
bf05_38_t1 ~~ bf05_38_t1
bf05_43_t1 ~~ bf05_43_t1
bf05_48_t1 ~~ bf05_48_t1
bf05_53_t1 ~~ bf05_53_t1
bf05_58_t1 ~~ bf05_58_t1

# Latent Variable Means
consc_curr1 ~ 0*1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
'
fit_cfa_consc_curr <- cfa(cfa_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_consc_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 34 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               454.207
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2735.550
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.850
  Tucker-Lewis Index (TLI)                       0.817
                                                      
  Robust Comparative Fit Index (CFI)             0.850
  Robust Tucker-Lewis Index (TLI)                0.817

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10517.936
  Loglikelihood unrestricted model (H1)     -10290.832
                                                      
  Akaike (AIC)                               21107.872
  Bayesian (BIC)                             21266.697
  Sample-size adjusted Bayesian (SABIC)      21152.405

Root Mean Square Error of Approximation:

  RMSEA                                          0.110
  90 Percent confidence interval - lower         0.101
  90 Percent confidence interval - upper         0.120
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.110
  90 Percent confidence interval - lower         0.101
  90 Percent confidence interval - upper         0.120
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.060

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_curr1 =~                                      
    b05_03_ (lmb1)    1.103    0.052   21.153    0.000
    b05_08_ (lmb2)    0.755    0.050   15.232    0.000
    b05_13_ (lmb3)   -0.435    0.044   -9.924    0.000
    b05_18_ (lmb4)   -0.907    0.045  -20.383    0.000
    b05_23_ (lmb5)    0.808    0.051   15.685    0.000
    b05_28_ (lmb6)    0.704    0.050   14.078    0.000
    b05_33_ (lmb7)   -0.897    0.045  -20.073    0.000
    b05_38_ (lmb8)   -0.664    0.039  -16.969    0.000
    b05_43_ (lmb9)   -0.459    0.037  -12.461    0.000
    b05_48_ (lm10)    0.783    0.047   16.803    0.000
    b05_53_ (lm11)   -0.655    0.044  -14.853    0.000
    b05_58_ (lm12)    0.675    0.051   13.219    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_1 (i1)    2.875    0.059   48.817    0.000
   .bf05_08_1         3.445    0.052   66.598    0.000
   .bf05_13_1         3.609    0.043   83.617    0.000
   .bf05_18_1         3.537    0.050   71.271    0.000
   .bf05_23_1         3.310    0.054   61.392    0.000
   .bf05_28_1         2.841    0.051   55.276    0.000
   .bf05_33_1         3.345    0.050   67.467    0.000
   .bf05_38_1         3.580    0.042   86.012    0.000
   .bf05_43_1         3.972    0.037  107.060    0.000
   .bf05_48_1         2.120    0.050   42.790    0.000
   .bf05_53_1         3.667    0.046   80.194    0.000
   .bf05_58_1         2.785    0.052   53.503    0.000
    cnsc_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_t1        0.893    0.062   14.367    0.000
   .bf05_08_t1        1.059    0.065   16.236    0.000
   .bf05_13_t1        0.946    0.056   16.991    0.000
   .bf05_18_t1        0.677    0.046   14.631    0.000
   .bf05_23_t1        1.118    0.070   16.082    0.000
   .bf05_28_t1        1.113    0.068   16.428    0.000
   .bf05_33_t1        0.692    0.047   14.696    0.000
   .bf05_38_t1        0.614    0.039   15.741    0.000
   .bf05_43_t1        0.628    0.038   16.656    0.000
   .bf05_48_t1        0.882    0.056   15.856    0.000
   .bf05_53_t1        0.844    0.052   16.251    0.000
   .bf05_58_t1        1.194    0.072   16.589    0.000
    consc_curr1       1.000                           
tidy(fit_cfa_consc_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term  op    label estimate std.error statistic p.value std.lv std.all std.nox
   <chr> <chr> <chr>    <dbl>     <dbl>     <dbl>   <dbl>  <dbl>   <dbl>   <dbl>
 1 cons… =~    lamb…    1.10     0.0522     21.2        0  1.10    0.759   0.759
 2 cons… =~    lamb…   -0.907    0.0445    -20.4        0 -0.907  -0.741  -0.741
 3 cons… =~    lamb…   -0.897    0.0447    -20.1        0 -0.897  -0.733  -0.733
 4 cons… =~    lamb…    0.808    0.0515     15.7        0  0.808   0.607   0.607
 5 cons… =~    lamb…    0.783    0.0466     16.8        0  0.783   0.640   0.640
 6 cons… =~    lamb…    0.755    0.0496     15.2        0  0.755   0.592   0.592
 7 cons… =~    lamb…    0.704    0.0500     14.1        0  0.704   0.555   0.555
 8 cons… =~    lamb…    0.675    0.0511     13.2        0  0.675   0.526   0.526
 9 cons… =~    lamb…   -0.664    0.0391    -17.0        0 -0.664  -0.646  -0.646
10 cons… =~    lamb…   -0.655    0.0441    -14.9        0 -0.655  -0.581  -0.581
11 cons… =~    lamb…   -0.459    0.0368    -12.5        0 -0.459  -0.501  -0.501
12 cons… =~    lamb…   -0.435    0.0438     -9.92       0 -0.435  -0.408  -0.408
# ℹ 1 more variable: abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_03_t1_r = bf05_03_t1,
         bf05_23_t1_r = bf05_23_t1,
         bf05_48_t1_r = bf05_48_t1,
         bf05_08_t1_r = bf05_08_t1,
         bf05_28_t1_r = bf05_28_t1,
         bf05_58_t1_r = bf05_58_t1,
         bf05_03_t2_r = bf05_03_t2,
         bf05_23_t2_r = bf05_23_t2,
         bf05_48_t2_r = bf05_48_t2,
         bf05_08_t2_r = bf05_08_t2,
         bf05_28_t2_r = bf05_28_t2,
         bf05_58_t2_r = bf05_58_t2) %>% 
  mutate(across(c(bf05_03_t1_r, bf05_23_t1_r, bf05_48_t1_r, bf05_08_t1_r, bf05_28_t1_r, bf05_58_t1_r,
                  bf05_03_t2_r, bf05_23_t2_r, bf05_48_t2_r, bf05_08_t2_r, bf05_28_t2_r, bf05_58_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_curr_par1_t1 = rowMeans(across(c(bf05_03_t1_r, bf05_08_t1_r, bf05_38_t1, bf05_13_t1)), na.rm=T),
         consc_curr_par2_t1 = rowMeans(across(c(bf05_18_t1, bf05_48_t1_r, bf05_58_t1_r, bf05_43_t1)), na.rm=T),
         consc_curr_par3_t1 = rowMeans(across(c(bf05_33_t1, bf05_23_t1_r, bf05_28_t1_r, bf05_53_t1)), na.rm=T),
         consc_curr_par1_t2 = rowMeans(across(c(bf05_03_t2_r, bf05_08_t2_r, bf05_38_t2, bf05_13_t2)), na.rm=T),
         consc_curr_par2_t2 = rowMeans(across(c(bf05_18_t2, bf05_48_t2_r, bf05_58_t2_r, bf05_43_t2)), na.rm=T),
         consc_curr_par3_t2 = rowMeans(across(c(bf05_33_t2, bf05_23_t2_r, bf05_28_t2_r, bf05_53_t2)), na.rm=T))

3.2.6 Conscientiousness - ideal self

Check CFA item loadings at T1

cfa_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*bf06_03_t1 + lambda1*bf06_03_t1 + lambda2*bf06_08_t1 + lambda3*bf06_13_t1 + lambda4*bf06_18_t1 + lambda5*bf06_23_t1 + lambda6*bf06_28_t1 + lambda7*bf06_33_t1 + lambda8*bf06_38_t1 + lambda9*bf06_43_t1 + lambda10*bf06_48_t1 + lambda11*bf06_53_t1 + lambda12*bf06_58_t1
# Intercepts
bf06_03_t1 ~ i1*1
bf06_08_t1 ~ 1
bf06_13_t1 ~ 1
bf06_18_t1 ~ 1
bf06_23_t1 ~ 1
bf06_28_t1 ~ 1
bf06_33_t1 ~ 1
bf06_38_t1 ~ 1
bf06_43_t1 ~ 1
bf06_48_t1 ~ 1
bf06_53_t1 ~ 1
bf06_58_t1 ~ 1

# Unique Variances
bf06_03_t1 ~~ bf06_03_t1
bf06_08_t1 ~~ bf06_08_t1
bf06_13_t1 ~~ bf06_13_t1
bf06_18_t1 ~~ bf06_18_t1
bf06_23_t1 ~~ bf06_23_t1
bf06_28_t1 ~~ bf06_28_t1
bf06_33_t1 ~~ bf06_33_t1
bf06_38_t1 ~~ bf06_38_t1
bf06_43_t1 ~~ bf06_43_t1
bf06_48_t1 ~~ bf06_48_t1
bf06_53_t1 ~~ bf06_53_t1
bf06_58_t1 ~~ bf06_58_t1

# Latent Variable Means
consc_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
'
fit_cfa_consc_ideal <- cfa(cfa_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_consc_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 22 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               187.648
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1314.476
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.893
  Tucker-Lewis Index (TLI)                       0.869
                                                      
  Robust Comparative Fit Index (CFI)             0.893
  Robust Tucker-Lewis Index (TLI)                0.869

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -8614.974
  Loglikelihood unrestricted model (H1)      -8521.150
                                                      
  Akaike (AIC)                               17301.949
  Bayesian (BIC)                             17460.774
  Sample-size adjusted Bayesian (SABIC)      17346.482

Root Mean Square Error of Approximation:

  RMSEA                                          0.064
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.074
  P-value H_0: RMSEA <= 0.050                    0.011
  P-value H_0: RMSEA >= 0.080                    0.004
                                                      
  Robust RMSEA                                   0.064
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.074
  P-value H_0: Robust RMSEA <= 0.050             0.011
  P-value H_0: Robust RMSEA >= 0.080             0.004

Standardized Root Mean Square Residual:

  SRMR                                           0.045

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_ideal1 =~                                     
    b06_03_ (lmb1)    0.370    0.050    7.373    0.000
    b06_08_ (lmb2)    0.387    0.040    9.588    0.000
    b06_13_ (lmb3)   -0.381    0.045   -8.386    0.000
    b06_18_ (lmb4)   -0.375    0.034  -11.085    0.000
    b06_23_ (lmb5)    0.505    0.037   13.464    0.000
    b06_28_ (lmb6)    0.533    0.046   11.630    0.000
    b06_33_ (lmb7)   -0.475    0.033  -14.577    0.000
    b06_38_ (lmb8)   -0.350    0.029  -12.147    0.000
    b06_43_ (lmb9)   -0.339    0.028  -12.075    0.000
    b06_48_ (lm10)    0.402    0.030   13.292    0.000
    b06_53_ (lm11)   -0.401    0.028  -14.246    0.000
    b06_58_ (lm12)    0.468    0.039   11.940    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_1 (i1)    1.695    0.046   36.829    0.000
   .bf06_08_1         1.629    0.038   43.084    0.000
   .bf06_13_1         4.258    0.042  101.045    0.000
   .bf06_18_1         4.348    0.032  135.448    0.000
   .bf06_23_1         1.522    0.037   41.626    0.000
   .bf06_28_1         1.959    0.044   44.648    0.000
   .bf06_33_1         4.407    0.032  137.144    0.000
   .bf06_38_1         4.635    0.028  167.198    0.000
   .bf06_43_1         4.571    0.027  170.332    0.000
   .bf06_48_1         1.374    0.029   46.598    0.000
   .bf06_53_1         4.581    0.028  165.490    0.000
   .bf06_58_1         1.749    0.038   46.500    0.000
    consc_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_t1        1.153    0.068   16.920    0.000
   .bf06_08_t1        0.720    0.044   16.526    0.000
   .bf06_13_t1        0.936    0.056   16.776    0.000
   .bf06_18_t1        0.487    0.030   16.149    0.000
   .bf06_23_t1        0.560    0.036   15.453    0.000
   .bf06_28_t1        0.888    0.055   16.062    0.000
   .bf06_33_t1        0.404    0.027   14.974    0.000
   .bf06_38_t1        0.345    0.022   15.902    0.000
   .bf06_43_t1        0.324    0.020   15.832    0.000
   .bf06_48_t1        0.368    0.024   15.566    0.000
   .bf06_53_t1        0.306    0.020   15.092    0.000
   .bf06_58_t1        0.642    0.040   15.968    0.000
    consc_ideal1      1.000                           
tidy(fit_cfa_consc_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term         op    label estimate std.error statistic  p.value std.lv std.all
   <chr>        <chr> <chr>    <dbl>     <dbl>     <dbl>    <dbl>  <dbl>   <dbl>
 1 consc_ideal… =~    lamb…    0.533    0.0458     11.6  0         0.533   0.492
 2 consc_ideal… =~    lamb…    0.505    0.0375     13.5  0         0.505   0.559
 3 consc_ideal… =~    lamb…   -0.475    0.0326    -14.6  0        -0.475  -0.599
 4 consc_ideal… =~    lamb…    0.468    0.0392     11.9  0         0.468   0.504
 5 consc_ideal… =~    lamb…    0.402    0.0302     13.3  0         0.402   0.552
 6 consc_ideal… =~    lamb…   -0.401    0.0282    -14.2  0        -0.401  -0.588
 7 consc_ideal… =~    lamb…    0.387    0.0404      9.59 0         0.387   0.415
 8 consc_ideal… =~    lamb…   -0.381    0.0454     -8.39 0        -0.381  -0.366
 9 consc_ideal… =~    lamb…   -0.375    0.0339    -11.1  0        -0.375  -0.474
10 consc_ideal… =~    lamb…    0.370    0.0501      7.37 1.67e-13  0.370   0.325
11 consc_ideal… =~    lamb…   -0.350    0.0288    -12.1  0        -0.350  -0.512
12 consc_ideal… =~    lamb…   -0.339    0.0281    -12.1  0        -0.339  -0.512
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_03_t1_r = bf06_03_t1,
         bf06_23_t1_r = bf06_23_t1,
         bf06_48_t1_r = bf06_48_t1,
         bf06_08_t1_r = bf06_08_t1,
         bf06_28_t1_r = bf06_28_t1,
         bf06_58_t1_r = bf06_58_t1,
         bf06_03_t2_r = bf06_03_t2,
         bf06_23_t2_r = bf06_23_t2,
         bf06_48_t2_r = bf06_48_t2,
         bf06_08_t2_r = bf06_08_t2,
         bf06_28_t2_r = bf06_28_t2,
         bf06_58_t2_r = bf06_58_t2) %>% 
  mutate(across(c(bf06_03_t1_r, bf06_23_t1_r, bf06_48_t1_r, bf06_08_t1_r, bf06_28_t1_r, bf06_58_t1_r,
                  bf06_03_t2_r, bf06_23_t2_r, bf06_48_t2_r, bf06_08_t2_r, bf06_28_t2_r, bf06_58_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_ideal_par1_t1 = rowMeans(across(c(bf06_28_t1_r, bf06_53_t1, bf06_18_t1, bf06_43_t1)), na.rm=T),
         consc_ideal_par2_t1 = rowMeans(across(c(bf06_23_t1_r, bf06_48_t1_r, bf06_13_t1, bf06_38_t1)), na.rm=T),
         consc_ideal_par3_t1 = rowMeans(across(c(bf06_33_t1, bf06_58_t1_r, bf06_08_t1_r, bf06_03_t1_r)), na.rm=T),
         consc_ideal_par1_t2 = rowMeans(across(c(bf06_28_t2_r, bf06_53_t2, bf06_18_t2, bf06_43_t2)), na.rm=T),
         consc_ideal_par2_t2 = rowMeans(across(c(bf06_23_t2_r, bf06_48_t2_r, bf06_13_t2, bf06_38_t2)), na.rm=T),
         consc_ideal_par3_t2 = rowMeans(across(c(bf06_33_t2, bf06_58_t2_r, bf06_08_t2_r, bf06_03_t2_r)), na.rm=T))

3.2.7 Neuroticism - current self

Check CFA item loadings at T1

cfa_neuro_curr <- '
#| warning: false

# Define the latent factors
neuro_curr1 =~ NA*bf05_04_t1 + lambda1*bf05_04_t1 + lambda2*bf05_09_t1 + lambda3*bf05_14_t1 + lambda4*bf05_19_t1 + lambda5*bf05_24_t1 + lambda6*bf05_29_t1 + lambda7*bf05_34_t1 + lambda8*bf05_39_t1 + lambda9*bf05_44_t1 + lambda10*bf05_49_t1 + lambda11*bf05_54_t1 + lambda12*bf05_59_t1

# Intercepts
bf05_04_t1 ~ i1*1
bf05_09_t1 ~ 1
bf05_14_t1 ~ 1
bf05_19_t1 ~ 1
bf05_24_t1 ~ 1
bf05_29_t1 ~ 1
bf05_34_t1 ~ 1
bf05_39_t1 ~ 1
bf05_44_t1 ~ 1
bf05_49_t1 ~ 1
bf05_54_t1 ~ 1
bf05_59_t1 ~ 1

# Unique Variances
bf05_04_t1 ~~ bf05_04_t1
bf05_09_t1 ~~ bf05_09_t1
bf05_14_t1 ~~ bf05_14_t1
bf05_19_t1 ~~ bf05_19_t1
bf05_24_t1 ~~ bf05_24_t1
bf05_29_t1 ~~ bf05_29_t1
bf05_34_t1 ~~ bf05_34_t1
bf05_39_t1 ~~ bf05_39_t1
bf05_44_t1 ~~ bf05_44_t1
bf05_49_t1 ~~ bf05_49_t1
bf05_54_t1 ~~ bf05_54_t1
bf05_59_t1 ~~ bf05_59_t1

# Latent Variable Means
neuro_curr1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
'
fit_cfa_neuro_curr <- cfa(cfa_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus")
Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan WARNING: some cases are empty and will be ignored:
  16 39 87 287 339 340 366 391 527 609
summary(fit_cfa_neuro_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 34 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               569.140
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3227.954
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.837
  Tucker-Lewis Index (TLI)                       0.801
                                                      
  Robust Comparative Fit Index (CFI)             0.837
  Robust Tucker-Lewis Index (TLI)                0.801

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10673.638
  Loglikelihood unrestricted model (H1)     -10389.067
                                                      
  Akaike (AIC)                               21419.275
  Bayesian (BIC)                             21578.101
  Sample-size adjusted Bayesian (SABIC)      21463.809

Root Mean Square Error of Approximation:

  RMSEA                                          0.125
  90 Percent confidence interval - lower         0.116
  90 Percent confidence interval - upper         0.135
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.125
  90 Percent confidence interval - lower         0.116
  90 Percent confidence interval - upper         0.135
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.059

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_curr1 =~                                      
    b05_04_ (lmb1)    0.888    0.047   18.818    0.000
    b05_09_ (lmb2)    0.760    0.048   15.751    0.000
    b05_14_ (lmb3)   -0.855    0.051  -16.904    0.000
    b05_19_ (lmb4)   -0.612    0.043  -14.319    0.000
    b05_24_ (lmb5)    0.800    0.048   16.784    0.000
    b05_29_ (lmb6)    0.930    0.045   20.642    0.000
    b05_34_ (lmb7)   -0.807    0.044  -18.345    0.000
    b05_39_ (lmb8)   -0.922    0.048  -19.389    0.000
    b05_44_ (lmb9)    0.794    0.046   17.206    0.000
    b05_49_ (lm10)    0.586    0.049   11.905    0.000
    b05_54_ (lm11)   -0.957    0.048  -20.023    0.000
    b05_59_ (lm12)   -0.790    0.052  -15.257    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_1 (i1)    2.703    0.052   52.176    0.000
   .bf05_09_1         2.871    0.051   56.336    0.000
   .bf05_14_1         3.256    0.054   60.173    0.000
   .bf05_19_1         3.658    0.044   82.408    0.000
   .bf05_24_1         2.906    0.051   57.018    0.000
   .bf05_29_1         2.865    0.051   56.646    0.000
   .bf05_34_1         3.885    0.048   80.965    0.000
   .bf05_39_1         3.404    0.052   65.195    0.000
   .bf05_44_1         3.112    0.049   63.152    0.000
   .bf05_49_1         2.355    0.050   47.242    0.000
   .bf05_54_1         3.337    0.053   62.949    0.000
   .bf05_59_1         3.171    0.054   58.589    0.000
    neur_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_t1        0.846    0.054   15.600    0.000
   .bf05_09_t1        1.002    0.061   16.301    0.000
   .bf05_14_t1        1.053    0.066   16.036    0.000
   .bf05_19_t1        0.826    0.050   16.567    0.000
   .bf05_24_t1        0.943    0.059   16.115    0.000
   .bf05_29_t1        0.694    0.047   14.800    0.000
   .bf05_34_t1        0.751    0.048   15.706    0.000
   .bf05_39_t1        0.807    0.054   14.922    0.000
   .bf05_44_t1        0.849    0.054   15.733    0.000
   .bf05_49_t1        1.169    0.069   16.884    0.000
   .bf05_54_t1        0.795    0.054   14.757    0.000
   .bf05_59_t1        1.160    0.071   16.276    0.000
    neuro_curr1       1.000                           
tidy(fit_cfa_neuro_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term  op    label estimate std.error statistic p.value std.lv std.all std.nox
   <chr> <chr> <chr>    <dbl>     <dbl>     <dbl>   <dbl>  <dbl>   <dbl>   <dbl>
 1 neur… =~    lamb…   -0.957    0.0478     -20.0       0 -0.957  -0.732  -0.732
 2 neur… =~    lamb…    0.930    0.0450      20.6       0  0.930   0.745   0.745
 3 neur… =~    lamb…   -0.922    0.0476     -19.4       0 -0.922  -0.716  -0.716
 4 neur… =~    lamb…    0.888    0.0472      18.8       0  0.888   0.694   0.694
 5 neur… =~    lamb…   -0.855    0.0506     -16.9       0 -0.855  -0.640  -0.640
 6 neur… =~    lamb…   -0.807    0.0440     -18.3       0 -0.807  -0.681  -0.681
 7 neur… =~    lamb…    0.800    0.0476      16.8       0  0.800   0.636   0.636
 8 neur… =~    lamb…    0.794    0.0461      17.2       0  0.794   0.653   0.653
 9 neur… =~    lamb…   -0.790    0.0518     -15.3       0 -0.790  -0.592  -0.592
10 neur… =~    lamb…    0.760    0.0482      15.8       0  0.760   0.604   0.604
11 neur… =~    lamb…   -0.612    0.0427     -14.3       0 -0.612  -0.559  -0.559
12 neur… =~    lamb…    0.586    0.0492      11.9       0  0.586   0.477   0.477
# ℹ 1 more variable: abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_29_t1_r = bf05_29_t1,
         bf05_04_t1_r = bf05_04_t1,
         bf05_24_t1_r = bf05_24_t1,
         bf05_44_t1_r = bf05_44_t1,
         bf05_09_t1_r = bf05_09_t1,
         bf05_49_t1_r = bf05_49_t1,
         bf05_29_t2_r = bf05_29_t2,
         bf05_04_t2_r = bf05_04_t2,
         bf05_24_t2_r = bf05_24_t2,
         bf05_44_t2_r = bf05_44_t2,
         bf05_09_t2_r = bf05_09_t2,
         bf05_49_t2_r = bf05_49_t2) %>% 
  mutate(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_24_t1_r, bf05_44_t1_r, bf05_09_t1_r, bf05_49_t1_r, 
                  bf05_29_t2_r, bf05_04_t2_r, bf05_24_t2_r, bf05_44_t2_r, bf05_09_t2_r, bf05_49_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_curr_par1_t1 = rowMeans(across(c(bf05_54_t1, bf05_34_t1, bf05_59_t1, bf05_49_t1_r)), na.rm=T),
         neuro_curr_par2_t1 = rowMeans(across(c(bf05_29_t1_r, bf05_14_t1, bf05_44_t1_r, bf05_19_t1)), na.rm=T),
         neuro_curr_par3_t1 = rowMeans(across(c(bf05_39_t1, bf05_04_t1_r, bf05_24_t1_r, bf05_09_t1_r)), na.rm=T),
         neuro_curr_par1_t2 = rowMeans(across(c(bf05_54_t2, bf05_34_t2, bf05_59_t2, bf05_49_t2_r)), na.rm=T),
         neuro_curr_par2_t2 = rowMeans(across(c(bf05_29_t2_r, bf05_14_t2, bf05_44_t2_r, bf05_19_t2)), na.rm=T),
         neuro_curr_par3_t2 = rowMeans(across(c(bf05_39_t2, bf05_04_t2_r, bf05_24_t2_r, bf05_09_t2_r)), na.rm=T))

3.2.8 Neuroticism - ideal self

Check CFA item loadings at T1

cfa_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*bf06_04_t1 + lambda1*bf06_04_t1 + lambda2*bf06_09_t1 + lambda3*bf06_14_t1 + lambda4*bf06_19_t1 + lambda5*bf06_24_t1 + lambda6*bf06_29_t1 + lambda7*bf06_34_t1 + lambda8*bf06_39_t1 + lambda9*bf06_44_t1 + lambda10*bf06_49_t1 + lambda11*bf06_54_t1 + lambda12*bf06_59_t1

# Intercepts
bf06_04_t1 ~ i1*1
bf06_09_t1 ~ 1
bf06_14_t1 ~ 1
bf06_19_t1 ~ 1
bf06_24_t1 ~ 1
bf06_29_t1 ~ 1
bf06_34_t1 ~ 1
bf06_39_t1 ~ 1
bf06_44_t1 ~ 1
bf06_49_t1 ~ 1
bf06_54_t1 ~ 1
bf06_59_t1 ~ 1

# Unique Variances
bf06_04_t1 ~~ bf06_04_t1
bf06_09_t1 ~~ bf06_09_t1
bf06_14_t1 ~~ bf06_14_t1
bf06_19_t1 ~~ bf06_19_t1
bf06_24_t1 ~~ bf06_24_t1
bf06_29_t1 ~~ bf06_29_t1
bf06_34_t1 ~~ bf06_34_t1
bf06_39_t1 ~~ bf06_39_t1
bf06_44_t1 ~~ bf06_44_t1
bf06_49_t1 ~~ bf06_49_t1
bf06_54_t1 ~~ bf06_54_t1
bf06_59_t1 ~~ bf06_59_t1

# Latent Variable Means
neuro_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
'
fit_cfa_neuro_ideal <- cfa(cfa_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_neuro_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               130.619
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1100.025
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.926
  Tucker-Lewis Index (TLI)                       0.909
                                                      
  Robust Comparative Fit Index (CFI)             0.926
  Robust Tucker-Lewis Index (TLI)                0.909

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -9102.265
  Loglikelihood unrestricted model (H1)      -9036.955
                                                      
  Akaike (AIC)                               18276.529
  Bayesian (BIC)                             18435.355
  Sample-size adjusted Bayesian (SABIC)      18321.063

Root Mean Square Error of Approximation:

  RMSEA                                          0.048
  90 Percent confidence interval - lower         0.038
  90 Percent confidence interval - upper         0.059
  P-value H_0: RMSEA <= 0.050                    0.590
  P-value H_0: RMSEA >= 0.080                    0.000
                                                      
  Robust RMSEA                                   0.048
  90 Percent confidence interval - lower         0.038
  90 Percent confidence interval - upper         0.059
  P-value H_0: Robust RMSEA <= 0.050             0.589
  P-value H_0: Robust RMSEA >= 0.080             0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.040

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_ideal1 =~                                     
    b06_04_ (lmb1)    0.302    0.031    9.777    0.000
    b06_09_ (lmb2)    0.292    0.035    8.319    0.000
    b06_14_ (lmb3)   -0.451    0.039  -11.560    0.000
    b06_19_ (lmb4)   -0.509    0.044  -11.705    0.000
    b06_24_ (lmb5)    0.288    0.031    9.189    0.000
    b06_29_ (lmb6)    0.376    0.046    8.207    0.000
    b06_34_ (lmb7)   -0.562    0.041  -13.631    0.000
    b06_39_ (lmb8)   -0.532    0.036  -14.861    0.000
    b06_44_ (lmb9)    0.364    0.034   10.618    0.000
    b06_49_ (lm10)    0.385    0.067    5.771    0.000
    b06_54_ (lm11)   -0.462    0.032  -14.294    0.000
    b06_59_ (lm12)   -0.467    0.040  -11.627    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_1 (i1)    4.571    0.029  159.374    0.000
   .bf06_09_1         4.383    0.032  136.584    0.000
   .bf06_14_1         1.708    0.037   46.235    0.000
   .bf06_19_1         2.141    0.041   51.959    0.000
   .bf06_24_1         4.642    0.029  160.572    0.000
   .bf06_29_1         4.217    0.042  100.634    0.000
   .bf06_34_1         1.898    0.040   47.604    0.000
   .bf06_39_1         1.651    0.035   47.110    0.000
   .bf06_44_1         4.396    0.032  137.034    0.000
   .bf06_49_1         3.537    0.060   58.812    0.000
   .bf06_54_1         1.496    0.031   47.603    0.000
   .bf06_59_1         1.980    0.038   52.200    0.000
    neuro_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_t1        0.410    0.025   16.354    0.000
   .bf06_09_t1        0.542    0.033   16.667    0.000
   .bf06_14_t1        0.627    0.039   15.891    0.000
   .bf06_19_t1        0.775    0.049   15.827    0.000
   .bf06_24_t1        0.426    0.026   16.475    0.000
   .bf06_29_t1        0.926    0.056   16.673    0.000
   .bf06_34_t1        0.653    0.043   15.118    0.000
   .bf06_39_t1        0.464    0.032   14.435    0.000
   .bf06_44_t1        0.494    0.031   16.145    0.000
   .bf06_49_t1        2.054    0.120   17.104    0.000
   .bf06_54_t1        0.388    0.026   14.738    0.000
   .bf06_59_t1        0.659    0.042   15.840    0.000
    neuro_ideal1      1.000                           
tidy(fit_cfa_neuro_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term         op    label estimate std.error statistic  p.value std.lv std.all
   <chr>        <chr> <chr>    <dbl>     <dbl>     <dbl>    <dbl>  <dbl>   <dbl>
 1 neuro_ideal… =~    lamb…   -0.562    0.0412    -13.6  0        -0.562  -0.571
 2 neuro_ideal… =~    lamb…   -0.532    0.0358    -14.9  0        -0.532  -0.616
 3 neuro_ideal… =~    lamb…   -0.509    0.0435    -11.7  0        -0.509  -0.501
 4 neuro_ideal… =~    lamb…   -0.467    0.0401    -11.6  0        -0.467  -0.498
 5 neuro_ideal… =~    lamb…   -0.462    0.0323    -14.3  0        -0.462  -0.596
 6 neuro_ideal… =~    lamb…   -0.451    0.0390    -11.6  0        -0.451  -0.495
 7 neuro_ideal… =~    lamb…    0.385    0.0667      5.77 7.87e- 9  0.385   0.259
 8 neuro_ideal… =~    lamb…    0.376    0.0459      8.21 2.22e-16  0.376   0.364
 9 neuro_ideal… =~    lamb…    0.364    0.0343     10.6  0         0.364   0.460
10 neuro_ideal… =~    lamb…    0.302    0.0309      9.78 0         0.302   0.427
11 neuro_ideal… =~    lamb…    0.292    0.0351      8.32 0         0.292   0.369
12 neuro_ideal… =~    lamb…    0.288    0.0314      9.19 0         0.288   0.404
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_29_t1_r = bf06_29_t1,
         bf06_04_t1_r = bf06_04_t1,
         bf06_24_t1_r = bf06_24_t1,
         bf06_44_t1_r = bf06_44_t1,
         bf06_09_t1_r = bf06_09_t1,
         bf06_49_t1_r = bf06_49_t1,
         bf06_29_t2_r = bf06_29_t2,
         bf06_04_t2_r = bf06_04_t2,
         bf06_24_t2_r = bf06_24_t2,
         bf06_44_t2_r = bf06_44_t2,
         bf06_09_t2_r = bf06_09_t2,
         bf06_49_t2_r = bf06_49_t2) %>% 
  mutate(across(c(bf06_29_t1_r, bf06_04_t1_r, bf06_24_t1_r, bf06_44_t1_r, bf06_09_t1_r, bf06_49_t1_r, 
                  bf06_29_t2_r, bf06_04_t2_r, bf06_24_t2_r, bf06_44_t2_r, bf06_09_t2_r, bf06_49_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_ideal_par1_t1 = rowMeans(across(c(bf06_34_t1, bf06_14_t1, bf06_44_t1_r, bf06_24_t1_r)), na.rm=T),
         neuro_ideal_par2_t1 = rowMeans(across(c(bf06_39_t1, bf06_54_t1, bf06_29_t1_r, bf06_09_t1_r)), na.rm=T),
         neuro_ideal_par3_t1 = rowMeans(across(c(bf06_19_t1, bf06_59_t1, bf06_49_t1_r, bf06_04_t1_r)), na.rm=T),
         neuro_ideal_par1_t2 = rowMeans(across(c(bf06_34_t2, bf06_14_t2, bf06_44_t2_r, bf06_24_t2_r)), na.rm=T),
         neuro_ideal_par2_t2 = rowMeans(across(c(bf06_39_t2, bf06_54_t2, bf06_29_t2_r, bf06_09_t2_r)), na.rm=T),
         neuro_ideal_par3_t2 = rowMeans(across(c(bf06_19_t2, bf06_59_t2, bf06_49_t2_r, bf06_04_t2_r)), na.rm=T))

3.2.9 Openness - current self

Check CFA item loadings at T1

cfa_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*bf05_05_t1 + lambda1*bf05_05_t1 + lambda2*bf05_10_t1 + lambda3*bf05_15_t1 + lambda4*bf05_20_t1 + lambda5*bf05_25_t1 + lambda6*bf05_30_t1 + lambda7*bf05_35_t1 + lambda8*bf05_40_t1 + lambda9*bf05_45_t1 + lambda10*bf05_50_t1 + lambda11*bf05_55_t1 + lambda12*bf05_60_t1

# Intercepts
bf05_05_t1 ~ i1*1
bf05_10_t1 ~ 1
bf05_15_t1 ~ 1
bf05_20_t1 ~ 1
bf05_25_t1 ~ 1
bf05_30_t1 ~ 1
bf05_35_t1 ~ 1
bf05_40_t1 ~ 1
bf05_45_t1 ~ 1
bf05_50_t1 ~ 1
bf05_55_t1 ~ 1
bf05_60_t1 ~ 1

# Unique Variances
bf05_05_t1 ~~ bf05_05_t1
bf05_10_t1 ~~ bf05_10_t1
bf05_15_t1 ~~ bf05_15_t1
bf05_20_t1 ~~ bf05_20_t1
bf05_25_t1 ~~ bf05_25_t1
bf05_30_t1 ~~ bf05_30_t1
bf05_35_t1 ~~ bf05_35_t1
bf05_40_t1 ~~ bf05_40_t1
bf05_45_t1 ~~ bf05_45_t1
bf05_50_t1 ~~ bf05_50_t1
bf05_55_t1 ~~ bf05_55_t1
bf05_60_t1 ~~ bf05_60_t1

# Latent Variable Means
openn_curr1 ~ 0*1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
'
fit_cfa_openn_curr <- cfa(cfa_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_openn_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 46 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               642.446
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1745.061
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.650
  Tucker-Lewis Index (TLI)                       0.572
                                                      
  Robust Comparative Fit Index (CFI)             0.649
  Robust Tucker-Lewis Index (TLI)                0.571

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10776.912
  Loglikelihood unrestricted model (H1)     -10455.689
                                                      
  Akaike (AIC)                               21625.824
  Bayesian (BIC)                             21784.649
  Sample-size adjusted Bayesian (SABIC)      21670.357

Root Mean Square Error of Approximation:

  RMSEA                                          0.134
  90 Percent confidence interval - lower         0.125
  90 Percent confidence interval - upper         0.143
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.134
  90 Percent confidence interval - lower         0.125
  90 Percent confidence interval - upper         0.143
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.084

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_curr1 =~                                      
    b05_05_ (lmb1)    0.010    0.059    0.173    0.863
    b05_10_ (lmb2)   -0.498    0.042  -11.728    0.000
    b05_15_ (lmb3)   -0.455    0.049   -9.322    0.000
    b05_20_ (lmb4)   -0.792    0.053  -14.965    0.000
    b05_25_ (lmb5)    0.506    0.056    8.980    0.000
    b05_30_ (lmb6)    0.568    0.056   10.148    0.000
    b05_35_ (lmb7)   -0.711    0.046  -15.283    0.000
    b05_40_ (lmb8)   -0.416    0.044   -9.473    0.000
    b05_45_ (lmb9)    0.485    0.050    9.612    0.000
    b05_50_ (lm10)    0.698    0.059   11.857    0.000
    b05_55_ (lm11)    0.586    0.049   11.922    0.000
    b05_60_ (lm12)   -0.555    0.050  -11.191    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_1 (i1)    3.012    0.053   56.496    0.000
   .bf05_10_1         4.080    0.039  104.539    0.000
   .bf05_15_1         3.573    0.041   86.216    0.000
   .bf05_20_1         3.811    0.048   80.116    0.000
   .bf05_25_1         2.374    0.052   46.035    0.000
   .bf05_30_1         2.610    0.052   50.370    0.000
   .bf05_35_1         3.890    0.042   92.239    0.000
   .bf05_40_1         3.901    0.040   96.671    0.000
   .bf05_45_1         2.056    0.047   44.152    0.000
   .bf05_50_1         2.512    0.054   46.339    0.000
   .bf05_55_1         2.489    0.047   53.065    0.000
   .bf05_60_1         3.521    0.043   81.036    0.000
    opnn_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_t1        1.725    0.099   17.421    0.000
   .bf05_10_t1        0.680    0.045   15.214    0.000
   .bf05_15_t1        0.839    0.055   15.303    0.000
   .bf05_20_t1        0.751    0.067   11.193    0.000
   .bf05_25_t1        1.364    0.083   16.472    0.000
   .bf05_30_t1        1.308    0.081   16.182    0.000
   .bf05_35_t1        0.578    0.052   11.111    0.000
   .bf05_40_t1        0.819    0.050   16.340    0.000
   .bf05_45_t1        1.085    0.066   16.344    0.000
   .bf05_50_t1        1.303    0.086   15.165    0.000
   .bf05_55_t1        0.997    0.063   15.869    0.000
   .bf05_60_t1        0.841    0.058   14.550    0.000
    openn_curr1       1.000                           
tidy(fit_cfa_openn_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term        op    label estimate std.error statistic p.value  std.lv  std.all
   <chr>       <chr> <chr>    <dbl>     <dbl>     <dbl>   <dbl>   <dbl>    <dbl>
 1 openn_curr… =~    lamb…  -0.792     0.0529   -15.0     0     -0.792  -0.675  
 2 openn_curr… =~    lamb…  -0.711     0.0465   -15.3     0     -0.711  -0.683  
 3 openn_curr… =~    lamb…   0.698     0.0589    11.9     0      0.698   0.522  
 4 openn_curr… =~    lamb…   0.586     0.0492    11.9     0      0.586   0.506  
 5 openn_curr… =~    lamb…   0.568     0.0559    10.1     0      0.568   0.445  
 6 openn_curr… =~    lamb…  -0.555     0.0496   -11.2     0     -0.555  -0.518  
 7 openn_curr… =~    lamb…   0.506     0.0564     8.98    0      0.506   0.398  
 8 openn_curr… =~    lamb…  -0.498     0.0425   -11.7     0     -0.498  -0.517  
 9 openn_curr… =~    lamb…   0.485     0.0505     9.61    0      0.485   0.422  
10 openn_curr… =~    lamb…  -0.455     0.0488    -9.32    0     -0.455  -0.445  
11 openn_curr… =~    lamb…  -0.416     0.0440    -9.47    0     -0.416  -0.418  
12 openn_curr… =~    lamb…   0.0103    0.0593     0.173   0.863  0.0103  0.00781
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_50_t1_r = bf05_50_t1,
         bf05_55_t1_r = bf05_55_t1,
         bf05_30_t1_r = bf05_30_t1,
         bf05_25_t1_r = bf05_25_t1,
         bf05_45_t1_r = bf05_45_t1,
         bf05_05_t1_r = bf05_05_t1,
         bf05_50_t2_r = bf05_50_t2,
         bf05_55_t2_r = bf05_55_t2,
         bf05_30_t2_r = bf05_30_t2,
         bf05_25_t2_r = bf05_25_t2,
         bf05_45_t2_r = bf05_45_t2,
         bf05_05_t2_r = bf05_05_t2) %>% 
  mutate(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_30_t1_r, bf05_25_t1_r, bf05_45_t1_r, bf05_05_t1_r,
                  bf05_50_t2_r, bf05_55_t2_r, bf05_30_t2_r, bf05_25_t2_r, bf05_45_t2_r, bf05_05_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_curr_par1_t1 = rowMeans(across(c(bf05_20_t1, bf05_60_t1, bf05_45_t1_r, bf05_05_t1_r)), na.rm=T),
         openn_curr_par2_t1 = rowMeans(across(c(bf05_35_t1, bf05_30_t1_r, bf05_10_t1, bf05_40_t1)), na.rm=T),
         openn_curr_par3_t1 = rowMeans(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_25_t1_r, bf05_15_t1)), na.rm=T),
         openn_curr_par1_t2 = rowMeans(across(c(bf05_20_t2, bf05_60_t2, bf05_45_t2_r, bf05_05_t2_r)), na.rm=T),
         openn_curr_par2_t2 = rowMeans(across(c(bf05_35_t2, bf05_30_t2_r, bf05_10_t2, bf05_40_t2)), na.rm=T),
         openn_curr_par3_t2 = rowMeans(across(c(bf05_50_t2_r, bf05_55_t2_r, bf05_25_t2_r, bf05_15_t2)), na.rm=T))

3.2.10 Openness - ideal self

Check CFA item loadings at T1

cfa_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*bf06_05_t1 + lambda1*bf06_05_t1 + lambda2*bf06_10_t1 + lambda3*bf06_15_t1 + lambda4*bf06_20_t1 + lambda5*bf06_25_t1 + lambda6*bf06_30_t1 + lambda7*bf06_35_t1 + lambda8*bf06_40_t1 + lambda9*bf06_45_t1 + lambda10*bf06_50_t1 + lambda11*bf06_55_t1 + lambda12*bf06_60_t1

# Intercepts
bf06_05_t1 ~ i1*1
bf06_10_t1 ~ 1
bf06_15_t1 ~ 1
bf06_20_t1 ~ 1
bf06_25_t1 ~ 1
bf06_30_t1 ~ 1
bf06_35_t1 ~ 1
bf06_40_t1 ~ 1
bf06_45_t1 ~ 1
bf06_50_t1 ~ 1
bf06_55_t1 ~ 1
bf06_60_t1 ~ 1

# Unique Variances
bf06_05_t1 ~~ bf06_05_t1
bf06_10_t1 ~~ bf06_10_t1
bf06_15_t1 ~~ bf06_15_t1
bf06_20_t1 ~~ bf06_20_t1
bf06_25_t1 ~~ bf06_25_t1
bf06_30_t1 ~~ bf06_30_t1
bf06_35_t1 ~~ bf06_35_t1
bf06_40_t1 ~~ bf06_40_t1
bf06_45_t1 ~~ bf06_45_t1
bf06_50_t1 ~~ bf06_50_t1
bf06_55_t1 ~~ bf06_55_t1
bf06_60_t1 ~~ bf06_60_t1

# Latent Variable Means
openn_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
'
fit_cfa_openn_ideal <- cfa(cfa_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_cfa_openn_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 47 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           609         619
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               338.475
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1263.953
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.763
  Tucker-Lewis Index (TLI)                       0.710
                                                      
  Robust Comparative Fit Index (CFI)             0.763
  Robust Tucker-Lewis Index (TLI)                0.710

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -9929.277
  Loglikelihood unrestricted model (H1)      -9760.040
                                                      
  Akaike (AIC)                               19930.554
  Bayesian (BIC)                             20089.379
  Sample-size adjusted Bayesian (SABIC)      19975.087

Root Mean Square Error of Approximation:

  RMSEA                                          0.093
  90 Percent confidence interval - lower         0.084
  90 Percent confidence interval - upper         0.103
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.988
                                                      
  Robust RMSEA                                   0.093
  90 Percent confidence interval - lower         0.084
  90 Percent confidence interval - upper         0.103
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.988

Standardized Root Mean Square Residual:

  SRMR                                           0.064

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_ideal1 =~                                     
    b06_05_ (lmb1)    0.089    0.067    1.327    0.184
    b06_10_ (lmb2)    0.355    0.033   10.849    0.000
    b06_15_ (lmb3)    0.308    0.028   10.941    0.000
    b06_20_ (lmb4)    0.663    0.040   16.479    0.000
    b06_25_ (lmb5)   -0.470    0.050   -9.403    0.000
    b06_30_ (lmb6)   -0.492    0.063   -7.857    0.000
    b06_35_ (lmb7)    0.643    0.038   17.108    0.000
    b06_40_ (lmb8)    0.319    0.047    6.829    0.000
    b06_45_ (lmb9)   -0.327    0.047   -6.928    0.000
    b06_50_ (lm10)   -0.594    0.050  -11.944    0.000
    b06_55_ (lm11)   -0.417    0.054   -7.764    0.000
    b06_60_ (lm12)    0.356    0.031   11.477    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_1 (i1)    3.206    0.060   53.863    0.000
   .bf06_10_1         4.463    0.030  147.530    0.000
   .bf06_15_1         4.591    0.026  180.034    0.000
   .bf06_20_1         4.276    0.039  109.103    0.000
   .bf06_25_1         1.908    0.046   41.798    0.000
   .bf06_30_1         2.036    0.057   35.611    0.000
   .bf06_35_1         4.269    0.037  116.063    0.000
   .bf06_40_1         3.959    0.042   93.286    0.000
   .bf06_45_1         1.678    0.042   39.754    0.000
   .bf06_50_1         2.079    0.047   44.151    0.000
   .bf06_55_1         2.182    0.049   44.579    0.000
   .bf06_60_1         4.527    0.029  157.658    0.000
    openn_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_t1        2.146    0.123   17.418    0.000
   .bf06_10_t1        0.432    0.027   15.862    0.000
   .bf06_15_t1        0.301    0.020   15.442    0.000
   .bf06_20_t1        0.495    0.040   12.414    0.000
   .bf06_25_t1        1.048    0.064   16.306    0.000
   .bf06_30_t1        1.746    0.104   16.754    0.000
   .bf06_35_t1        0.411    0.035   11.792    0.000
   .bf06_40_t1        0.995    0.059   16.965    0.000
   .bf06_45_t1        0.979    0.058   16.855    0.000
   .bf06_50_t1        0.997    0.064   15.699    0.000
   .bf06_55_t1        1.286    0.077   16.792    0.000
   .bf06_60_t1        0.375    0.024   15.507    0.000
    openn_ideal1      1.000                           
tidy(fit_cfa_openn_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading))
# A tibble: 12 × 11
   term        op    label estimate std.error statistic  p.value  std.lv std.all
   <chr>       <chr> <chr>    <dbl>     <dbl>     <dbl>    <dbl>   <dbl>   <dbl>
 1 openn_idea… =~    lamb…   0.663     0.0403     16.5  0         0.663   0.686 
 2 openn_idea… =~    lamb…   0.643     0.0376     17.1  0         0.643   0.708 
 3 openn_idea… =~    lamb…  -0.594     0.0497    -11.9  0        -0.594  -0.511 
 4 openn_idea… =~    lamb…  -0.492     0.0626     -7.86 4.00e-15 -0.492  -0.349 
 5 openn_idea… =~    lamb…  -0.470     0.0500     -9.40 0        -0.470  -0.417 
 6 openn_idea… =~    lamb…  -0.417     0.0537     -7.76 8.22e-15 -0.417  -0.345 
 7 openn_idea… =~    lamb…   0.356     0.0310     11.5  0         0.356   0.503 
 8 openn_idea… =~    lamb…   0.355     0.0327     10.8  0         0.355   0.475 
 9 openn_idea… =~    lamb…  -0.327     0.0472     -6.93 4.27e-12 -0.327  -0.314 
10 openn_idea… =~    lamb…   0.319     0.0467      6.83 8.55e-12  0.319   0.305 
11 openn_idea… =~    lamb…   0.308     0.0281     10.9  0         0.308   0.489 
12 openn_idea… =~    lamb…   0.0889    0.0670      1.33 1.84e- 1  0.0889  0.0606
# ℹ 2 more variables: std.nox <dbl>, abs_loading <dbl>

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_50_t1_r = bf06_50_t1,
         bf06_55_t1_r = bf06_55_t1,
         bf06_30_t1_r = bf06_30_t1,
         bf06_25_t1_r = bf06_25_t1,
         bf06_45_t1_r = bf06_45_t1,
         bf06_05_t1_r = bf06_05_t1,
         bf06_50_t2_r = bf06_50_t2,
         bf06_55_t2_r = bf06_55_t2,
         bf06_30_t2_r = bf06_30_t2,
         bf06_25_t2_r = bf06_25_t2,
         bf06_45_t2_r = bf06_45_t2,
         bf06_05_t2_r = bf06_05_t2) %>% 
  mutate(across(c(bf06_50_t1_r, bf06_55_t1_r, bf06_30_t1_r, bf06_25_t1_r, bf06_45_t1_r, bf06_05_t1_r,
                  bf06_50_t2_r, bf06_55_t2_r, bf06_30_t2_r, bf06_25_t2_r, bf06_45_t2_r, bf06_05_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_ideal_par1_t1 = rowMeans(across(c(bf06_20_t1, bf06_55_t1_r, bf06_45_t1_r, bf06_05_t1)), na.rm=T),
         openn_ideal_par2_t1 = rowMeans(across(c(bf06_35_t1, bf06_25_t1_r, bf06_10_t1, bf06_15_t1)), na.rm=T),
         openn_ideal_par3_t1 = rowMeans(across(c(bf06_50_t1_r, bf06_30_t1_r, bf06_60_t1, bf06_40_t1)), na.rm=T),
         openn_ideal_par1_t2 = rowMeans(across(c(bf06_20_t2, bf06_55_t2_r, bf06_45_t2_r, bf06_05_t2)), na.rm=T),
         openn_ideal_par2_t2 = rowMeans(across(c(bf06_35_t2, bf06_25_t2_r, bf06_10_t2, bf06_15_t2)), na.rm=T),
         openn_ideal_par3_t2 = rowMeans(across(c(bf06_50_t2_r, bf06_30_t2_r, bf06_60_t2, bf06_40_t2)), na.rm=T))

4 Measurement invariance

4.1 Well-being outcomes

Testing for measurement invariance of the latent traits across time.

4.1.1 Life satisfaction

Satisfaction with life scale (only the first four items - last one taps into a somewhat different construct)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + sw06_02_t1 + sw06_03_t1 + sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + sw06_02_t2 + sw06_03_t2 + sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_configural_swls <- cfa(configural_swls, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_configural_swls, fit.measures = TRUE)

# Weak invariance model
weak_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_weak_swls <- cfa(weak_swls, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_weak_swls, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_strong_swls <- cfa(strong_swls, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_strong_swls, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ u1*sw06_01_t1
sw06_02_t1 ~~ u2*sw06_02_t1
sw06_03_t1 ~~ u3*sw06_03_t1
sw06_04_t1 ~~ u4*sw06_04_t1

sw06_01_t2 ~~ u1*sw06_01_t2
sw06_02_t2 ~~ u2*sw06_02_t2
sw06_03_t2 ~~ u3*sw06_03_t2
sw06_04_t2 ~~ u4*sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_strict_swls <- cfa(strict_swls, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_strict_swls, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   618    25  313. 12839. 12949. 0.902 0.855 0.158 0.0486
2 weak         618    22  313. 12833. 12930. 0.903 0.876 0.146 0.0487
3 strong       618    19  314. 12828. 12912. 0.903 0.892 0.137 0.0487
4 strict       618    15  327. 12833. 12899. 0.900 0.904 0.129 0.0516
# chi-square difference test for nested models 
anova(fit_configural_swls, fit_weak_swls)

Chi-Squared Difference Test

                    Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_swls 19 12839 12949 312.52                                    
fit_weak_swls       22 12833 12930 312.92    0.39766     0       3     0.9407
anova(fit_weak_swls, fit_strong_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_swls   22 12833 12930 312.92                                    
fit_strong_swls 25 12828 12912 314.12     1.2015     0       3     0.7526
anova(fit_strong_swls, fit_strict_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)  
fit_strong_swls 25 12828 12912 314.12                                         
fit_strict_swls 29 12833 12899 326.51     12.389 0.058253       4    0.01468 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit relatively similar across model specifications. Chi^2 tests indicate that strong measurement invariance is given.

4.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + meaning_par2_t1 + meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + meaning_par2_t2 + meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_configural_meaning <- cfa(configural_meaning, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_configural_meaning, fit.measures = TRUE)

# Weak invariance model
weak_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_weak_meaning <- cfa(weak_meaning, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_weak_meaning, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_strong_meaning <- cfa(strong_meaning, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_strong_meaning, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ u1*meaning_par1_t1
meaning_par2_t1 ~~ u2*meaning_par2_t1
meaning_par3_t1 ~~ u3*meaning_par3_t1

meaning_par1_t2 ~~ u1*meaning_par1_t2
meaning_par2_t2 ~~ u2*meaning_par2_t2
meaning_par3_t2 ~~ u3*meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_strict_meaning <- cfa(strict_meaning, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_strict_meaning, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   618    19  220. 9460. 9544. 0.923 0.855 0.207 0.0380
2 weak         618    17  223. 9459. 9535. 0.922 0.883 0.186 0.0419
3 strong       618    15  224. 9456. 9523. 0.923 0.903 0.169 0.0411
4 strict       618    12  226. 9452. 9505. 0.923 0.923 0.151 0.0408
# chi-square difference test for nested models 
anova(fit_configural_meaning, fit_weak_meaning)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff
fit_configural_meaning  8 9460.3 9544.4 219.72                           
fit_weak_meaning       10 9459.4 9534.6 222.76     3.0424 0.02904       2
                       Pr(>Chisq)
fit_configural_meaning           
fit_weak_meaning           0.2185
anova(fit_weak_meaning, fit_strong_meaning)

Chi-Squared Difference Test

                   Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_meaning   10 9459.4 9534.6 222.76                                    
fit_strong_meaning 12 9456.2 9522.6 223.54    0.78133     0       2     0.6766
anova(fit_strong_meaning, fit_strict_meaning)

Chi-Squared Difference Test

                   Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_strong_meaning 12 9456.2 9522.6 223.54                                    
fit_strict_meaning 15 9452.3 9505.4 225.70     2.1552     0       3     0.5408

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + selfes_par2_t1 + selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + selfes_par2_t2 + selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_configural_selfes <- cfa(configural_selfes, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_configural_selfes, fit.measures = TRUE)

# Weak invariance model
weak_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_weak_selfes <- cfa(weak_selfes, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_weak_selfes, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_strong_selfes <- cfa(strong_selfes, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_strong_selfes, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ u1*selfes_par1_t1
selfes_par2_t1 ~~ u2*selfes_par2_t1
selfes_par3_t1 ~~ u3*selfes_par3_t1

selfes_par1_t2 ~~ u1*selfes_par1_t2
selfes_par2_t2 ~~ u2*selfes_par2_t2
selfes_par3_t2 ~~ u3*selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_strict_selfes <- cfa(strict_selfes, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_strict_selfes, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   618    19  127. 6608. 6692. 0.966 0.936 0.155 0.0181
2 weak         618    17  128. 6605. 6680. 0.966 0.950 0.138 0.0209
3 strong       618    15  128. 6601. 6668. 0.967 0.959 0.125 0.0220
4 strict       618    12  131. 6598. 6651. 0.967 0.967 0.112 0.0203
# chi-square difference test for nested models 
anova(fit_configural_selfes, fit_weak_selfes)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_selfes  8 6608.2 6692.3 126.91                         
fit_weak_selfes       10 6604.9 6680.2 127.65     0.7353     0       2
                      Pr(>Chisq)
fit_configural_selfes           
fit_weak_selfes           0.6924
anova(fit_weak_selfes, fit_strong_selfes)

Chi-Squared Difference Test

                  Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_selfes   10 6604.9 6680.2 127.65                                    
fit_strong_selfes 12 6601.3 6667.7 128.05    0.40196     0       2     0.8179
anova(fit_strong_selfes, fit_strict_selfes)

Chi-Squared Difference Test

                  Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_strong_selfes 12 6601.3 6667.7 128.05                                    
fit_strict_selfes 15 6598.3 6651.4 131.03     2.9746     0       3     0.3956

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + concept_par2_t1 + concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + concept_par2_t2 + concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_configural_concept <- cfa(configural_concept, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_configural_concept, fit.measures = TRUE)

# Weak invariance model
weak_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_weak_concept <- cfa(weak_concept, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_weak_concept, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_strong_concept <- cfa(strong_concept, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_strong_concept, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ u1*concept_par1_t1
concept_par2_t1 ~~ u2*concept_par2_t1
concept_par3_t1 ~~ u3*concept_par3_t1

concept_par1_t2 ~~ u1*concept_par1_t2
concept_par2_t2 ~~ u2*concept_par2_t2
concept_par3_t2 ~~ u3*concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_strict_concept <- cfa(strict_concept, data = df_sbsa_wide_wb, mimic = "mplus")
summary(fit_strict_concept, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   618    19  132. 7652. 7737. 0.949 0.904 0.159 0.0267
2 weak         618    17  133. 7649. 7724. 0.950 0.925 0.141 0.0283
3 strong       618    15  133. 7645. 7711. 0.950 0.938 0.128 0.0280
4 strict       618    12  136. 7642. 7695. 0.950 0.950 0.114 0.0296
# chi-square difference test for nested models 
anova(fit_configural_concept, fit_weak_concept)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_concept  8 7652.4 7736.5 132.39                         
fit_weak_concept       10 7648.8 7724.0 132.78    0.38786     0       2
                       Pr(>Chisq)
fit_configural_concept           
fit_weak_concept           0.8237
anova(fit_weak_concept, fit_strong_concept)

Chi-Squared Difference Test

                   Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_concept   10 7648.8 7724.0 132.78                                    
fit_strong_concept 12 7644.9 7711.3 132.88    0.10064     0       2     0.9509
anova(fit_strong_concept, fit_strict_concept)

Chi-Squared Difference Test

                   Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_concept 12 7644.9 7711.3 132.88                            
fit_strict_concept 15 7642.2 7695.4 136.22     3.3458 0.013657       3
                   Pr(>Chisq)
fit_strong_concept           
fit_strict_concept     0.3413

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2 Big Five

Testing for measurement invariance of the latent BFI-2 traits across time.

4.2.1 Extraversion: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + extra_curr_par2_t1 + extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural_extra_curr <- cfa(configural_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak_extra_curr <- cfa(weak_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong_extra_curr <- cfa(strong_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ u1*extra_curr_par1_t1
extra_curr_par2_t1 ~~ u2*extra_curr_par2_t1
extra_curr_par3_t1 ~~ u3*extra_curr_par3_t1

extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict_extra_curr <- cfa(strict_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   619    19  316. 6840. 6924. 0.870 0.757 0.249 0.0490
2 weak         619    17  318. 6838. 6913. 0.870 0.806 0.223 0.0534
3 strong       619    15  318. 6835. 6901. 0.871 0.839 0.203 0.0548
4 strict       619    12  320. 6830. 6884. 0.871 0.871 0.181 0.0531
# chi-square difference test for nested models 
anova(fit_configural_extra_curr, fit_weak_extra_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_curr  8 6840.2 6924.3 315.84                         
fit_weak_extra_curr       10 6838.0 6913.3 317.61     1.7675     0       2
                          Pr(>Chisq)
fit_configural_extra_curr           
fit_weak_extra_curr           0.4132
anova(fit_weak_extra_curr, fit_strong_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_extra_curr   10 6838.0 6913.3 317.61                         
fit_strong_extra_curr 12 6834.7 6901.1 318.31    0.69545     0       2
                      Pr(>Chisq)
fit_weak_extra_curr             
fit_strong_extra_curr     0.7063
anova(fit_strong_extra_curr, fit_strict_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_extra_curr 12 6834.7 6901.1 318.31                         
fit_strict_extra_curr 15 6830.4 6883.6 320.06     1.7554     0       3
                      Pr(>Chisq)
fit_strong_extra_curr           
fit_strict_extra_curr     0.6247

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.2.2 Extraversion: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + extra_ideal_par2_t1 + extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural_extra_ideal <- cfa(configural_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak_extra_ideal <- cfa(weak_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong_extra_ideal <- cfa(strong_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ u1*extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ u2*extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ u3*extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict_extra_ideal <- cfa(strict_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   619    19  118. 5672. 5757. 0.914 0.838 0.149 0.0451
2 weak         619    17  118. 5669. 5744. 0.915 0.872 0.132 0.0488
3 strong       619    15  121. 5667. 5734. 0.915 0.893 0.121 0.0470
4 strict       619    12  130. 5670. 5723. 0.910 0.910 0.111 0.0818
# chi-square difference test for nested models 
anova(fit_configural_extra_ideal, fit_weak_extra_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_ideal  8 5672.4 5756.6 117.64                         
fit_weak_extra_ideal       10 5669.1 5744.4 118.34    0.70155     0       2
                           Pr(>Chisq)
fit_configural_extra_ideal           
fit_weak_extra_ideal           0.7041
anova(fit_weak_extra_ideal, fit_strong_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_extra_ideal   10 5669.1 5744.4 118.34                            
fit_strong_extra_ideal 12 5667.5 5733.9 120.70     2.3603 0.017059       2
                       Pr(>Chisq)
fit_weak_extra_ideal             
fit_strong_extra_ideal     0.3072
anova(fit_strong_extra_ideal, fit_strict_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_extra_ideal 12 5667.5 5733.9 120.70                            
fit_strict_extra_ideal 15 5670.3 5723.5 129.56     8.8594 0.056172       3
                       Pr(>Chisq)  
fit_strong_extra_ideal             
fit_strict_extra_ideal    0.03122 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.3 Agreeableness: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + agree_curr_par2_t1 + agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural_agree_curr <- cfa(configural_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak_agree_curr <- cfa(weak_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong_agree_curr <- cfa(strong_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ u1*agree_curr_par1_t1
agree_curr_par2_t1 ~~ u2*agree_curr_par2_t1
agree_curr_par3_t1 ~~ u3*agree_curr_par3_t1

agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict_agree_curr <- cfa(strict_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   619    19  183. 5735. 5819. 0.888 0.789 0.188 0.0539
2 weak         619    17  184. 5732. 5807. 0.888 0.832 0.167 0.0589
3 strong       619    15  184. 5728. 5795. 0.889 0.861 0.152 0.0573
4 strict       619    12  196. 5734. 5787. 0.883 0.883 0.140 0.0722
# chi-square difference test for nested models 
anova(fit_configural_agree_curr, fit_weak_agree_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_curr  8 5734.6 5818.7 182.58                         
fit_weak_agree_curr       10 5731.7 5807.0 183.64     1.0692     0       2
                          Pr(>Chisq)
fit_configural_agree_curr           
fit_weak_agree_curr           0.5859
anova(fit_weak_agree_curr, fit_strong_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_curr   10 5731.7 5807.0 183.64                         
fit_strong_agree_curr 12 5728.4 5794.9 184.39    0.74856     0       2
                      Pr(>Chisq)
fit_weak_agree_curr             
fit_strong_agree_curr     0.6878
anova(fit_strong_agree_curr, fit_strict_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_agree_curr 12 5728.4 5794.9 184.39                            
fit_strict_agree_curr 15 5733.9 5787.1 195.91     11.515 0.067715       3
                      Pr(>Chisq)   
fit_strong_agree_curr              
fit_strict_agree_curr   0.009243 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit still not satisfactory. Chi^2 tests indicate that strong measurement invariance is given.

4.2.4 Agreeableness: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + agree_ideal_par2_t1 + agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural_agree_ideal <- cfa(configural_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak_agree_ideal <- cfa(weak_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong_agree_ideal <- cfa(strong_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ u1*agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ u2*agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ u3*agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict_agree_ideal <- cfa(strict_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   619    19  132. 5985. 6069. 0.918 0.847 0.158 0.0445
2 weak         619    17  132. 5981. 6057. 0.919 0.879 0.140 0.0471
3 strong       619    15  132. 5978. 6044. 0.921 0.901 0.127 0.0463
4 strict       619    12  135. 5974. 6027. 0.921 0.921 0.114 0.0587
# chi-square difference test for nested models 
anova(fit_configural_agree_ideal, fit_weak_agree_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_ideal  8 5984.9 6069.1 131.52                         
fit_weak_agree_ideal       10 5981.5 6056.7 132.06    0.54162     0       2
                           Pr(>Chisq)
fit_configural_agree_ideal           
fit_weak_agree_ideal           0.7628
anova(fit_weak_agree_ideal, fit_strong_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_ideal   10 5981.5 6056.7 132.06                         
fit_strong_agree_ideal 12 5977.7 6044.1 132.32     0.2588     0       2
                       Pr(>Chisq)
fit_weak_agree_ideal             
fit_strong_agree_ideal     0.8786
anova(fit_strong_agree_ideal, fit_strict_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_agree_ideal 12 5977.7 6044.1 132.32                         
fit_strict_agree_ideal 15 5974.3 6027.4 134.89      2.568     0       3
                       Pr(>Chisq)
fit_strong_agree_ideal           
fit_strict_agree_ideal     0.4631

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.5 Conscientiousness: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + consc_curr_par2_t1 + consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural_consc_curr <- cfa(configural_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak_consc_curr <- cfa(weak_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong_consc_curr <- cfa(strong_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ u1*consc_curr_par1_t1
consc_curr_par2_t1 ~~ u2*consc_curr_par2_t1
consc_curr_par3_t1 ~~ u3*consc_curr_par3_t1

consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict_consc_curr <- cfa(strict_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   619    19  190. 6324. 6408. 0.942 0.891 0.191 0.0279
2 weak         619    17  190. 6321. 6396. 0.942 0.913 0.170 0.0289
3 strong       619    15  192. 6319. 6385. 0.942 0.928 0.156 0.0284
4 strict       619    12  195. 6316. 6369. 0.942 0.942 0.139 0.0301
# chi-square difference test for nested models 
anova(fit_configural_consc_curr, fit_weak_consc_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_curr  8 6324.2 6408.4 189.57                         
fit_weak_consc_curr       10 6320.5 6395.8 189.86    0.29498     0       2
                          Pr(>Chisq)
fit_configural_consc_curr           
fit_weak_consc_curr           0.8629
anova(fit_weak_consc_curr, fit_strong_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_consc_curr   10 6320.5 6395.8 189.86                            
fit_strong_consc_curr 12 6319.0 6385.4 192.30     2.4372 0.018792       2
                      Pr(>Chisq)
fit_weak_consc_curr             
fit_strong_consc_curr     0.2956
anova(fit_strong_consc_curr, fit_strict_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_consc_curr 12 6319.0 6385.4 192.30                         
fit_strict_consc_curr 15 6315.7 6368.8 195.03     2.7263     0       3
                      Pr(>Chisq)
fit_strong_consc_curr           
fit_strict_consc_curr     0.4358

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.6 Conscientiousness: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + consc_ideal_par2_t1 + consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural_consc_ideal <- cfa(configural_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak_consc_ideal <- cfa(weak_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong_consc_ideal <- cfa(strong_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ u1*consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ u2*consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ u3*consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict_consc_ideal <- cfa(strict_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   619    19  52.9 4708. 4792. 0.970 0.944 0.0953 0.0252
2 weak         619    17  55.6 4707. 4782. 0.970 0.955 0.0858 0.0511
3 strong       619    15  55.6 4703. 4769. 0.971 0.964 0.0766 0.0513
4 strict       619    12  64.8 4706. 4759. 0.967 0.967 0.0732 0.0514
# chi-square difference test for nested models 
anova(fit_configural_consc_ideal, fit_weak_consc_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_consc_ideal  8 4708.1 4792.2 52.939                            
fit_weak_consc_ideal       10 4706.7 4782.0 55.560     2.6216 0.022407       2
                           Pr(>Chisq)
fit_configural_consc_ideal           
fit_weak_consc_ideal           0.2696
anova(fit_weak_consc_ideal, fit_strong_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_ideal   10 4706.7 4782.0 55.560                         
fit_strong_consc_ideal 12 4702.8 4769.2 55.632   0.071642     0       2
                       Pr(>Chisq)
fit_weak_consc_ideal             
fit_strong_consc_ideal     0.9648
anova(fit_strong_consc_ideal, fit_strict_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_consc_ideal 12 4702.8 4769.2 55.632                            
fit_strict_consc_ideal 15 4705.9 4759.1 64.795     9.1628 0.057608       3
                       Pr(>Chisq)  
fit_strong_consc_ideal             
fit_strict_consc_ideal     0.0272 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.7 Neuroticism: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + neuro_curr_par2_t1 + neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural_neuro_curr <- cfa(configural_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak_neuro_curr <- cfa(weak_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong_neuro_curr <- cfa(strong_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ u1*neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ u2*neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ u3*neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict_neuro_curr <- cfa(strict_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   619    19  279. 7413. 7498. 0.906 0.823 0.234 0.0381
2 weak         619    17  280. 7410. 7486. 0.906 0.859 0.209 0.0400
3 strong       619    15  287. 7413. 7480. 0.904 0.880 0.193 0.0400
4 strict       619    12  291. 7411. 7464. 0.904 0.904 0.172 0.0449
# chi-square difference test for nested models 
anova(fit_configural_neuro_curr, fit_weak_neuro_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_curr  8 7413.4 7497.5 279.29                         
fit_weak_neuro_curr       10 7410.3 7485.5 280.15    0.86209     0       2
                          Pr(>Chisq)
fit_configural_neuro_curr           
fit_weak_neuro_curr           0.6498
anova(fit_weak_neuro_curr, fit_strong_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_neuro_curr   10 7410.3 7485.5 280.15                            
fit_strong_neuro_curr 12 7413.4 7479.8 287.30     7.1539 0.064522       2
                      Pr(>Chisq)  
fit_weak_neuro_curr               
fit_strong_neuro_curr    0.02796 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_neuro_curr, fit_strict_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_neuro_curr 12 7413.4 7479.8 287.30                            
fit_strict_neuro_curr 15 7410.9 7464.0 290.77     3.4705 0.015917       3
                      Pr(>Chisq)
fit_strong_neuro_curr           
fit_strict_neuro_curr     0.3246

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.8 Neuroticism: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + neuro_ideal_par2_t1 + neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural_neuro_ideal <- cfa(configural_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak_neuro_ideal <- cfa(weak_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong_neuro_ideal <- cfa(strong_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ u1*neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ u2*neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ u3*neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict_neuro_ideal <- cfa(strict_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   619    19  35.1 5249. 5333. 0.980 0.963 0.0739 0.0211
2 weak         619    17  35.3 5245. 5320. 0.981 0.972 0.0639 0.0217
3 strong       619    15  36.8 5243. 5309. 0.982 0.977 0.0578 0.0216
4 strict       619    12  39.6 5239. 5293. 0.982 0.982 0.0514 0.0279
# chi-square difference test for nested models 
anova(fit_configural_neuro_ideal, fit_weak_neuro_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_ideal  8 5248.9 5333.0 35.062                         
fit_weak_neuro_ideal       10 5245.1 5320.4 35.264    0.20202     0       2
                           Pr(>Chisq)
fit_configural_neuro_ideal           
fit_weak_neuro_ideal           0.9039
anova(fit_weak_neuro_ideal, fit_strong_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_neuro_ideal   10 5245.1 5320.4 35.264                         
fit_strong_neuro_ideal 12 5242.6 5309.0 36.786     1.5224     0       2
                       Pr(>Chisq)
fit_weak_neuro_ideal             
fit_strong_neuro_ideal     0.4671
anova(fit_strong_neuro_ideal, fit_strict_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_neuro_ideal 12 5242.6 5309.0 36.786                         
fit_strict_neuro_ideal 15 5239.4 5292.5 39.574      2.788     0       3
                       Pr(>Chisq)
fit_strong_neuro_ideal           
fit_strict_neuro_ideal     0.4255

Good model fit across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.2.9 Openness: current-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + openn_curr_par2_t1 + openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural_openn_curr <- cfa(configural_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak_openn_curr <- cfa(weak_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong_openn_curr <- cfa(strong_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ u1*openn_curr_par1_t1
openn_curr_par2_t1 ~~ u2*openn_curr_par2_t1
openn_curr_par3_t1 ~~ u3*openn_curr_par3_t1

openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict_openn_curr <- cfa(strict_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   619    19  174. 6237. 6321. 0.916 0.842 0.183 0.0423
2 weak         619    17  175. 6234. 6309. 0.916 0.874 0.163 0.0452
3 strong       619    15  175. 6230. 6296. 0.917 0.897 0.148 0.0456
4 strict       619    12  183. 6232. 6285. 0.915 0.915 0.134 0.0535
# chi-square difference test for nested models 
anova(fit_configural_openn_curr, fit_weak_openn_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_curr  8 6237.1 6321.2 174.27                         
fit_weak_openn_curr       10 6233.9 6309.1 175.05    0.77456     0       2
                          Pr(>Chisq)
fit_configural_openn_curr           
fit_weak_openn_curr           0.6789
anova(fit_weak_openn_curr, fit_strong_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_openn_curr   10 6233.9 6309.1 175.05                         
fit_strong_openn_curr 12 6229.9 6296.4 175.14   0.095301     0       2
                      Pr(>Chisq)
fit_weak_openn_curr             
fit_strong_openn_curr     0.9535
anova(fit_strong_openn_curr, fit_strict_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_curr 12 6229.9 6296.4 175.14                            
fit_strict_openn_curr 15 6231.6 6284.7 182.76     7.6164 0.049859       3
                      Pr(>Chisq)  
fit_strong_openn_curr             
fit_strict_openn_curr    0.05464 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.2.10 Openness: ideal-self

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + openn_ideal_par2_t1 + openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural_openn_ideal <- cfa(configural_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_configural_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak_openn_ideal <- cfa(weak_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_weak_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong_openn_ideal <- cfa(strong_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strong_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ u1*openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ u2*openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ u3*openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict_openn_ideal <- cfa(strict_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus")
summary(fit_strict_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   619    19  111. 5753. 5837. 0.925 0.859 0.144 0.0425
2 weak         619    17  112. 5750. 5825. 0.925 0.888 0.129 0.0507
3 strong       619    15  115. 5749. 5815. 0.925 0.906 0.118 0.0520
4 strict       619    12  121. 5749. 5802. 0.923 0.923 0.107 0.0552
# chi-square difference test for nested models 
anova(fit_configural_openn_ideal, fit_weak_openn_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_ideal  8 5752.8 5836.9 111.05                         
fit_weak_openn_ideal       10 5750.2 5825.4 112.42     1.3684     0       2
                           Pr(>Chisq)
fit_configural_openn_ideal           
fit_weak_openn_ideal           0.5045
anova(fit_weak_openn_ideal, fit_strong_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_ideal   10 5750.2 5825.4 112.42                            
fit_strong_openn_ideal 12 5748.9 5815.3 115.12     2.7037 0.023841       2
                       Pr(>Chisq)
fit_weak_openn_ideal             
fit_strong_openn_ideal     0.2588
anova(fit_strong_openn_ideal, fit_strict_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_ideal 12 5748.9 5815.3 115.12                            
fit_strict_openn_ideal 15 5748.7 5801.8 120.95     5.8286 0.039028       3
                       Pr(>Chisq)
fit_strong_openn_ideal           
fit_strict_openn_ideal     0.1203

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.


5 Descriptives

5.1 General change/acceptance goals

Summary stats:

table(df_sbsa$sb06_01) # How much do you want to change your personality in general?

  1   2   3   4   5 
 22  54 130  77  22 
summary(df_sbsa$sb06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   3.000   3.000   3.075   4.000   5.000     922 
table(df_sbsa$sa06_01) # How much do you want to be better at accepting yourself for who you are?

  1   2   3   4   5 
  6  11  42  98 138 
summary(df_sbsa$sa06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   1.00    4.00    4.00    4.19    5.00    5.00     932 

Plot:

cowplot::plot_grid(
  ggplot(df_sbsa %>% filter(!is.na(sb06_01)), aes(x=sb06_01)) + geom_histogram(bins=5) + 
  labs(x="General change goal", y="Frequency") + theme_bw(),
  ggplot(df_sbsa %>% filter(!is.na(sa06_01)), aes(x=sa06_01)) + geom_histogram(bins=5) + 
  labs(x="General acceptance goal", y="Frequency") + theme_bw(), 
  ncol = 2
)

5.2 Facet-specific change/acceptance goals

Skill Building

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you [want to] change. Please rate how much you would like to change your level of each of these traits, where 1 = I do not want to change and 5 = I want to change a lot.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to change in some of these traits. We want to know how you think you changed in each trait. Please rate how much you changed your level of each of these traits during this study, where 1 = I am completely the same and 5 = I have changed a lot.

Self Acceptance

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you accept yourself. Please rate how much you accept your level of each of these traits, where 1 = I completely accept myself and 5 = I want to accept myself more.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to accept your level on some of these traits more. We want to know how much you think you accept yourself more because of this study. Please rate how much you accept your level of each of these traits more during this study, where 1 = I accept myself the same and 5 = I accept this about myself much more.

Plot distributions

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 01], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_01)), aes(x=sb07_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_01)), aes(x=sb12_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_01)), aes(x=sa07_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_01)), aes(x=sa14_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 02], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_02)), aes(x=sb07_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_02)), aes(x=sb12_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_02)), aes(x=sa07_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_02)), aes(x=sa14_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 03], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_03)), aes(x=sb07_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_03)), aes(x=sb12_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_03)), aes(x=sa07_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_03)), aes(x=sa14_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 04], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_04)), aes(x=sb07_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_04)), aes(x=sb12_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_04)), aes(x=sa07_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_04)), aes(x=sa14_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 05], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_05)), aes(x=sb07_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_05)), aes(x=sb12_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_05)), aes(x=sa07_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_05)), aes(x=sa14_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 06], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_06)), aes(x=sb07_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_06)), aes(x=sb12_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_06)), aes(x=sa07_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_06)), aes(x=sa14_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 07], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_07)), aes(x=sb07_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_07)), aes(x=sb12_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_07)), aes(x=sa07_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_07)), aes(x=sa14_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 08], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_08)), aes(x=sb07_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_08)), aes(x=sb12_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_08)), aes(x=sa07_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_08)), aes(x=sa14_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 09], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_09)), aes(x=sb07_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_09)), aes(x=sb12_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_09)), aes(x=sa07_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_09)), aes(x=sa14_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 10], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_10)), aes(x=sb07_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_10)), aes(x=sb12_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_10)), aes(x=sa07_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_10)), aes(x=sa14_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 11], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_11)), aes(x=sb07_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_11)), aes(x=sb12_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_11)), aes(x=sa07_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_11)), aes(x=sa14_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 12], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_12)), aes(x=sb07_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_12)), aes(x=sb12_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_12)), aes(x=sa07_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_12)), aes(x=sa14_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 13], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_13)), aes(x=sb07_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_13)), aes(x=sb12_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_13)), aes(x=sa07_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_13)), aes(x=sa14_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 14], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_14)), aes(x=sb07_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_14)), aes(x=sb12_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_14)), aes(x=sa07_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_14)), aes(x=sa14_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 15], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_15)), aes(x=sb07_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_15)), aes(x=sb12_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_15)), aes(x=sa07_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_15)), aes(x=sa14_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)


6 Confirmatory results

6.1 H1: Well-being - similarity correlations

All four psychological well-being indicators will be positively correlated with a greater similarity between current- and ideal self-ratings of personality.

To examine this at the level of overall profiles, we will compute the correlations between the psychological well-being indicators and the Fisher z transformed correlations between the facet- and item-level real-ideal self-profiles. To examine this at the level of individual traits, we will compute the correlation between psychological well-being indicators and the squared difference between current- and ideal-self rating for each Big Five trait and facet.

6.1.1 Profile similarity

Computations:

Show the code
cormat_profile <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")

rownames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
corrplot(cormat_profile, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Positive correlations of well-being indicators with profile similarity between current self and ideal self personality. Especially high correlation with self-esteem. High congruence of item-level and facet-level profile similarity.

6.1.2 Individual traits: squared differences

Computations:

Show the code
cormat_sqtraits <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqfacets <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[6:20], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))
colnames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))

Big Five traits

corrplot(cormat_sqtraits, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Big Five facets

corrplot(cormat_sqfacets, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.6, diag = FALSE) # also add numbers

Here we see negative correlations of well-being indicators with squared trait- and facet-level mean-score differences between current self and ideal self personality.


6.2 H2: Well-being - latent change

Both groups will increase in all four psychological well-being indicators.

We will test the mean-level difference between baseline and follow up using a latent change model.

6.2.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2 <- '
swls_t1 =~ 1*sw06_01_t1 + lamb2*sw06_02_t1 + lamb3*sw06_03_t1 + lamb4*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t1 ~ 1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~ swls_t1     # This estimates the self-feedback parameter

sw06_01_t1 ~~ sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ res1*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ res2*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ res3*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ res4*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ res1*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ res2*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ res3*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ res4*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2 <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
618 19 12571.75 12655.86 0.989 0.046 0.029
# parameters of interest
params_lcs_swls_hyp2 <- broom::tidy(fit_mi_lcs_swls_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "d_swls_1 ~ swls_t1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.946 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.635 NA NA
d_swls_1 ~1 0.761 0.565 0.956 1.178 7.636 0
swls_t1 ~1 2.701 2.612 2.790 2.807 59.290 0
d_swls_1 ~~ d_swls_1 0.391 0.313 0.470 0.938 9.763 0
d_swls_1 ~ swls_t1 -0.167 -0.229 -0.105 -0.249 -5.249 0

Plot model:

semPaths(fit_mi_lcs_swls_hyp2, what="est", 
         sizeLat = 7, sizeMan = 7, edge.label.cex = .75, intercepts = T, edge.color="black")

Significantly higher life satisfaction at the post test, b = 0.761, p = 0. Those with initially higher levels of life satisfaction (at T1) change to a lesser degree.

6.2.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2 <- '
meaning_t1 =~ 1*meaning_par1_t1 + lamb2*meaning_par2_t1 + lamb3*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1              # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t1 ~ 1               # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~ meaning_t1     # This estimates the self-feedback parameter

meaning_par1_t1 ~~ meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ res1*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ res2*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ res3*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ res1*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ res2*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ res3*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2 <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
618 15 9254.729 9321.126 0.996 0.037 0.026
# parameters of interest
params_lcs_meaning_hyp2 <- broom::tidy(fit_mi_lcs_meaning_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "d_meaning_1 ~ meaning_t1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 0.966 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.825 NA NA
d_meaning_1 ~1 1.352 1.088 1.615 1.667 10.068 0
meaning_t1 ~1 3.230 3.140 3.321 3.403 69.859 0
d_meaning_1 ~~ d_meaning_1 0.560 0.440 0.680 0.852 9.161 0
d_meaning_1 ~ meaning_t1 -0.329 -0.405 -0.253 -0.385 -8.468 0

Participants improved significantly in meaning in life across time, b = 1.352, p = 0.

6.2.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2 <- '
selfes_t1 =~ 1*selfes_par1_t1 + lamb2*selfes_par2_t1 + lamb3*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1             # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t1 ~ 1              # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~ selfes_t1     # This estimates the self-feedback parameter

selfes_par1_t1 ~~ selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ res1*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ res2*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ res3*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ res1*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ res2*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ res3*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2 <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
618 15 6481.653 6548.05 1 0 0.01
# parameters of interest
params_lcs_selfes_hyp2 <- broom::tidy(fit_mi_lcs_selfes_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "d_selfes_1 ~ selfes_t1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 1.002 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.684 NA NA
d_selfes_1 ~1 1.027 0.817 1.237 1.930 9.594 0
selfes_t1 ~1 3.131 3.062 3.200 4.019 89.000 0
d_selfes_1 ~~ d_selfes_1 0.250 0.204 0.295 0.881 10.763 0
d_selfes_1 ~ selfes_t1 -0.235 -0.296 -0.175 -0.345 -7.632 0

Participants increased significantly in self-esteem between the two assessments, b = 1.027, p = 0.

6.2.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2 <- '
concept_t1 =~ 1*concept_par1_t1 + lamb2*concept_par2_t1 + lamb3*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1              # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t1 ~ 1               # This estimates the intercept of concept_t1 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~ concept_t1     # This estimates the self-feedback parameter

concept_par1_t1 ~~ concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ res1*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ res2*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ res3*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ res1*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ res2*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ res3*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2 <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
618 15 7524.884 7591.282 1 0.011 0.017
# parameters of interest
params_lcs_concept_hyp2 <- broom::tidy(fit_mi_lcs_concept_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "d_concept_1 ~ concept_t1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 0.969 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.797 NA NA
d_concept_1 ~1 1.102 0.888 1.316 1.948 10.110 0
concept_t1 ~1 2.925 2.860 2.989 4.255 89.037 0
d_concept_1 ~~ d_concept_1 0.276 0.222 0.330 0.862 10.030 0
d_concept_1 ~ concept_t1 -0.306 -0.374 -0.237 -0.371 -8.746 0

Self concept clarity improved significantly across time, b = 1.102, p = 0.


6.3 H3: Distance between ideal- and current-self over time

The distance between ideal- and current-self will decrease in both groups.

We will use two strategies to test this hypothesis. First, we will compute the Fisher z-transformed profile correlation between current- and ideal-self and test whether it increased across assessments. Second, we will test whether the squared difference between current- and ideal-self ratings for each Big Five trait decreased across assessments. We will test mean-level differences in profile correlations and squared differences between baseline and follow up using repeated-measures t-test.

6.3.1 Profile similarity

Reshape to wide:

Show the code
# reshape to wide
df_sbsa_wide_profdiff <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, profile_corr_item_z, profile_corr_facet_z, ends_with("_sqdiff")) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = -c(pid, time))

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1
W = 0.90485, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1
D = 0.092715, p-value = 1.769e-13
# descriptives
psych::describe(df_sbsa_wide_profdiff$profile_corr_item_z_t1)
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 609 0.38 0.48   0.37    0.36 0.46 -1.05 2.65   3.7 0.48     1.07 0.02
psych::describe(df_sbsa_wide_profdiff$profile_corr_item_z_t2)
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 615 0.55 0.53   0.51    0.53 0.52 -0.9 3.44  4.34 0.72     2.44 0.02
# facet-level profile correlation
shapiro.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1
W = 0.9228, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1
D = 0.086666, p-value = 1.089e-11
# descriptives
psych::describe(df_sbsa_wide_profdiff$profile_corr_facet_z_t1)
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 609 0.28 0.66   0.22    0.25 0.65 -1.5 2.65  4.15 0.46     0.42 0.03
psych::describe(df_sbsa_wide_profdiff$profile_corr_facet_z_t2)
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 615  0.5 0.73   0.46    0.48 0.74 -1.22 3.94  5.16 0.47     0.82 0.03

Results summary:

t_profile_corr_item <- t.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2, df_sbsa_wide_profdiff$profile_corr_item_z_t1, paired = TRUE)
t_profile_corr_facet <- t.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2, df_sbsa_wide_profdiff$profile_corr_facet_z_t1, paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item), tidy(t_profile_corr_facet)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.172 10.573 0 604 0.140 0.204 Paired t-test two.sided
Facet-level profile corr. 0.216 9.865 0 604 0.173 0.259 Paired t-test two.sided
# effect sizes
d_profile_corr_item <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa)
d_profile_corr_item$cohen.d
                        lower    effect     upper
profile_corr_item_z 0.2350445 0.3480071 0.4608281
d_profile_corr_facet <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa)
d_profile_corr_facet$cohen.d
                         lower    effect     upper
profile_corr_facet_z 0.2061032 0.3189235 0.4316158

Plot

profile_df_plot <- df_sbsa %>% select(pid, time, profile_corr_item_z, profile_corr_facet_z) %>% 
  pivot_longer(-c(pid, time), names_to = "itemfacet", values_to = "corr") %>% 
  mutate(itemfacet2 = fct_recode(itemfacet, "Item-level" = "profile_corr_item_z", "Facet-level" = "profile_corr_facet_z"),
         itemfacet2 = fct_reorder(itemfacet2, corr, .desc = F))

ggplot(profile_df_plot) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation", 
       title = "H3: Distance between ideal- and current-self") + 
  theme_bw()

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations.

6.3.2 Individual traits: squared differences

Checking assumptions

# extra
shapiro.test(df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1
W = 0.87633, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1
D = 0.14993, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$extra_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 609 1.84 2.03   1.17    1.47 1.48   0 11.11 11.11 1.76      3.3 0.08
psych::describe(df_sbsa_wide_profdiff$extra_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 615 1.34 1.62   0.84    1.02 0.99   0 10.56 10.56 2.04     4.75 0.07
# agree
shapiro.test(df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1
W = 0.79415, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1
D = 0.19411, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$agree_sqdiff_t1)
   vars   n mean  sd median trimmed  mad min  max range skew kurtosis   se
X1    1 609 0.55 0.9   0.17    0.35 0.25   0 7.11  7.11 3.46    15.86 0.04
psych::describe(df_sbsa_wide_profdiff$agree_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 615 0.39 0.74   0.11    0.23 0.15   0 10.03 10.03 5.94    57.41 0.03
# consc
shapiro.test(df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1
W = 0.82623, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1
D = 0.15318, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$consc_sqdiff_t1)
   vars   n mean  sd median trimmed  mad min   max range skew kurtosis   se
X1    1 609 1.71 2.1      1    1.31 1.32   0 14.06 14.06 2.25     6.86 0.09
psych::describe(df_sbsa_wide_profdiff$consc_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 615 1.36 1.74   0.69    1.01 0.99   0 13.44 13.44  2.4     7.99 0.07
# neuro
shapiro.test(df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1
W = 0.91151, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1
D = 0.11685, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$neuro_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 609 3.38 3.48   2.25     2.8 2.68   0  16    16  1.4     1.42 0.14
psych::describe(df_sbsa_wide_profdiff$neuro_sqdiff_t2)
   vars   n mean  sd median trimmed  mad min   max range skew kurtosis   se
X1    1 615 2.69 3.1   1.56    2.08 1.95   0 15.34 15.34 1.75     2.83 0.13
# openn
shapiro.test(df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1
W = 0.7943, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1
D = 0.19404, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$openn_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 609 0.46 0.76   0.11    0.28 0.16   0 5.06  5.06  2.9       10 0.03
psych::describe(df_sbsa_wide_profdiff$openn_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 615 0.37 0.61   0.11    0.23 0.15   0 4.34  4.34 3.07     12.1 0.02

Results summary:

mod_traits_sqdiff <- df_sbsa_wide_profdiff %>% 
  select(-starts_with("profile")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ time, data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(names(b5_vars))

mod_traits_unlist <- mod_traits_sqdiff[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff)) {
  mod_traits_unlist <- bind_rows(mod_traits_unlist, mod_traits_sqdiff[[i]] %>% tidy())
}

kable(mod_traits_unlist %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion 0.090 2.318 0.021 604 0.014 0.166 Paired t-test two.sided
agreeableness 0.162 5.340 0.000 604 0.103 0.222 Paired t-test two.sided
conscientiousness 0.641 4.461 0.000 604 0.359 0.924 Paired t-test two.sided
neuroticism 0.444 5.059 0.000 604 0.272 0.617 Paired t-test two.sided
openness 0.154 4.210 0.000 604 0.082 0.226 Paired t-test two.sided
sociability 0.330 5.001 0.000 604 0.200 0.459 Paired t-test two.sided
assertiveness 0.150 3.175 0.002 604 0.057 0.243 Paired t-test two.sided
energy 0.939 7.455 0.000 604 0.691 1.186 Paired t-test two.sided
compassion 0.485 4.997 0.000 604 0.295 0.676 Paired t-test two.sided
respectfulness 0.492 7.398 0.000 604 0.361 0.622 Paired t-test two.sided
trust 0.221 3.159 0.002 604 0.084 0.358 Paired t-test two.sided
organization 0.683 7.025 0.000 604 0.492 0.875 Paired t-test two.sided
productiveness 0.097 3.474 0.001 604 0.042 0.151 Paired t-test two.sided
responsibility 0.391 4.111 0.000 604 0.204 0.578 Paired t-test two.sided
anxiety 0.538 5.193 0.000 604 0.334 0.741 Paired t-test two.sided
depression 0.156 3.703 0.000 604 0.073 0.239 Paired t-test two.sided
volatility 0.247 3.703 0.000 604 0.116 0.378 Paired t-test two.sided
curiosity 0.787 7.704 0.000 604 0.586 0.988 Paired t-test two.sided
aesthetic 0.351 4.895 0.000 604 0.210 0.492 Paired t-test two.sided
imagination 0.685 6.148 0.000 604 0.466 0.904 Paired t-test two.sided
# effect sizes
cohend_cust = function(outcome, df) {
  form = as.formula(paste0(outcome, " ~ time"))
  psych::cohen.d(form, data = df)
}

d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), df_sbsa)
d_traits_unlist <- as_tibble(d_trait$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), df_sbsa)
  d_traits_unlist <- bind_rows(d_traits_unlist, as_tibble(d_trait$cohen.d))
}
kable(d_traits_unlist %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.383 -0.271 -0.158
agreeableness -0.307 -0.195 -0.082
conscientiousness -0.296 -0.183 -0.071
neuroticism -0.323 -0.211 -0.099
openness -0.244 -0.132 -0.019
sociability -0.378 -0.265 -0.153
assertiveness -0.320 -0.208 -0.096
energy -0.320 -0.208 -0.095
compassion -0.289 -0.177 -0.065
respectfulness -0.263 -0.151 -0.039
trust -0.320 -0.208 -0.095
organization -0.281 -0.169 -0.057
productiveness -0.297 -0.184 -0.072
responsibility -0.257 -0.145 -0.033
anxiety -0.269 -0.157 -0.044
depression -0.357 -0.244 -0.132
volatility -0.315 -0.202 -0.090
curiosity -0.255 -0.143 -0.031
aesthetic -0.224 -0.112 0.000
imagination -0.215 -0.103 0.009

Significantly lower squared mean-level differences at the second measurement occasion, both for the Big Five traits and the 15 BFI-2 facets.

Plot (traits/facets sorted by average size of squared differences)

sqdiff_df_plot <- df_sbsa %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff <- ggplot(sqdiff_df_plot) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

For some of the facets, the distribution look very similar and differences over time are perhaps driven by outliers.


6.4 H4: Change goals and change in personality (current / ideal) in skill-building group

In the skill-building group, there will be a correlation between change goals and change in current-self ratings but not change in ideal-self ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level differences across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb <- df_sbsa %>% 
  filter(rando=="Skill-Building") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# colnames(df_sbsa_wide_pers_sb)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Skill-Building") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb)

6.4.1 Big Five traits

6.4.1.1 Extraversion - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~ extra_t1       # This estimates the self-feedback parameter

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp4 <- lavaan(mi_lcs_extra_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 4143.568 4211.229 0.982 0.063 0.082
# parameters of interest
params_lcs_extra_curr_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                     "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.980 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.555 NA NA
d_extra_1 ~1 0.523 0.280 0.766 1.594 4.219 0.000
extra_t1 ~1 2.755 2.677 2.832 4.757 69.576 0.000
d_extra_1 ~~ d_extra_1 0.101 0.063 0.139 0.939 5.225 0.000
d_extra_1 ~ extra_t1 -0.139 -0.224 -0.054 -0.246 -3.210 0.001
d_extra_1 ~~ sb06_01_t1 0.052 0.001 0.102 0.163 2.006 0.045
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.224 0.000
sb06_01_t1 ~1 3.078 2.965 3.190 3.076 53.689 0.000

The correlation of the general change goal with the extraversion change score (current-self) is significantly different from zero, r = 0.163, p = 0.045.

6.4.1.2 Extraversion - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~ extra_t1       # This estimates the self-feedback parameter

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp4 <- lavaan(mi_lcs_extra_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 3751.37 3819.03 0.997 0.021 0.045
# parameters of interest
params_lcs_extra_ideal_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.941 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.631 NA NA
d_extra_1 ~1 0.588 0.054 1.123 2.205 2.159 0.031
extra_t1 ~1 3.855 3.791 3.920 9.688 117.306 0.000
d_extra_1 ~~ d_extra_1 0.067 0.037 0.097 0.943 4.356 0.000
d_extra_1 ~ extra_t1 -0.160 -0.297 -0.023 -0.239 -2.283 0.022
d_extra_1 ~~ sb06_01_t1 0.035 -0.006 0.076 0.135 1.673 0.094
sb06_01_t1 ~~ sb06_01_t1 1.001 0.852 1.149 1.000 13.226 0.000
sb06_01_t1 ~1 3.076 2.963 3.188 3.074 53.710 0.000

Correlation of general change goal with extraversion change score (ideal-self) is not significantly different from zero, r = 0.135, p = 0.094.

6.4.1.3 Extraversion - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~ extra_t1       # This estimates the self-feedback parameter

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp4 <- lavaan(mi_lcs_extra_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 6179.958 6273.93 0.941 0.091 0.131
# parameters of interest
params_lcs_extra_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.989 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.564 NA NA
d_extra_1 ~1 0.555 0.315 0.796 1.683 4.531 0.000
extra_t1 ~1 2.755 2.678 2.833 4.761 69.636 0.000
d_extra_1 ~~ d_extra_1 0.101 0.064 0.139 0.930 5.274 0.000
d_extra_1 ~ extra_t1 -0.151 -0.236 -0.067 -0.265 -3.504 0.000
goals ~~ d_extra_1 0.008 -0.032 0.048 0.044 0.374 0.708
goals ~~ goals 0.293 0.054 0.531 1.000 2.407 0.016

Correlation of specific, facet-level change goals with extraversion change score (current-self) is not significantly different from zero, r = 0.044, p = 0.708.

6.4.1.4 Extraversion - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~ extra_t1       # This estimates the self-feedback parameter

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp4 <- lavaan(mi_lcs_extra_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 5785.581 5879.554 0.963 0.058 0.088
# parameters of interest
params_lcs_extra_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.940 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.630 NA NA
d_extra_1 ~1 0.584 0.026 1.141 2.188 2.051 0.040
extra_t1 ~1 3.855 3.791 3.920 9.679 117.312 0.000
d_extra_1 ~~ d_extra_1 0.067 0.037 0.098 0.944 4.314 0.000
d_extra_1 ~ extra_t1 -0.159 -0.303 -0.015 -0.237 -2.165 0.030
goals ~~ d_extra_1 0.014 -0.029 0.057 0.096 0.630 0.528
goals ~~ goals 0.312 0.041 0.583 1.000 2.259 0.024

Correlation of specific, facet-level change goals with extraversion change score (ideal-self) is not significantly different from zero, r = 0.096, p = 0.528.

6.4.1.5 Agreeableness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~ agree_t1       # This estimates the self-feedback parameter

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp4 <- lavaan(mi_lcs_agree_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 3724.455 3792.115 0.991 0.037 0.034
# parameters of interest
params_lcs_agree_curr_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                     "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.057 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.543 NA NA
d_agree_1 ~1 0.693 0.400 0.986 3.178 4.639 0.000
agree_t1 ~1 3.344 3.278 3.410 7.881 99.472 0.000
d_agree_1 ~~ d_agree_1 0.041 0.020 0.063 0.871 3.716 0.000
d_agree_1 ~ agree_t1 -0.185 -0.270 -0.100 -0.360 -4.246 0.000
d_agree_1 ~~ sb06_01_t1 -0.018 -0.052 0.017 -0.087 -1.006 0.314
sb06_01_t1 ~~ sb06_01_t1 1.001 0.852 1.149 1.000 13.224 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.074 53.631 0.000

Correlation of general change goal with agreeableness change score (current-self) is not significantly different from zero, r = -0.087, p = 0.314.

6.4.1.6 Agreeableness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~ agree_t1       # This estimates the self-feedback parameter

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp4 <- lavaan(mi_lcs_agree_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 3843.95 3911.61 0.995 0.028 0.035
# parameters of interest
params_lcs_agree_ideal_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.011 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.632 NA NA
d_agree_1 ~1 0.847 0.272 1.423 3.184 2.885 0.004
agree_t1 ~1 3.941 3.870 4.013 9.267 108.592 0.000
d_agree_1 ~~ d_agree_1 0.063 0.030 0.096 0.891 3.754 0.000
d_agree_1 ~ agree_t1 -0.206 -0.348 -0.065 -0.330 -2.857 0.004
d_agree_1 ~~ sb06_01_t1 -0.002 -0.046 0.042 -0.009 -0.098 0.922
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.671 0.000

Correlation of general change goal with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.009, p = 0.922.

6.4.1.7 Agreeableness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~ agree_t1       # This estimates the self-feedback parameter

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp4 <- lavaan(mi_lcs_agree_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 5864.338 5958.31 0.961 0.065 0.085
# parameters of interest
params_lcs_agree_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.056 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.541 NA NA
d_agree_1 ~1 0.686 0.396 0.977 3.151 4.627 0.000
agree_t1 ~1 3.344 3.278 3.410 7.870 99.446 0.000
d_agree_1 ~~ d_agree_1 0.041 0.020 0.063 0.873 3.732 0.000
d_agree_1 ~ agree_t1 -0.183 -0.268 -0.097 -0.357 -4.181 0.000
goals ~~ d_agree_1 0.001 -0.039 0.041 0.006 0.056 0.955
goals ~~ goals 0.900 0.565 1.234 1.000 5.275 0.000

Correlation of specific, facet-level change goals with agreeableness change score (current-self) is not significantly different from zero, r = 0.006, p = 0.955.

6.4.1.8 Agreeableness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~ agree_t1       # This estimates the self-feedback parameter

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp4 <- lavaan(mi_lcs_agree_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 5980.062 6074.034 0.991 0.031 0.034
# parameters of interest
params_lcs_agree_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.632 NA NA
d_agree_1 ~1 0.849 0.288 1.410 3.199 2.965 0.003
agree_t1 ~1 3.942 3.870 4.013 9.274 108.628 0.000
d_agree_1 ~~ d_agree_1 0.063 0.030 0.095 0.890 3.756 0.000
d_agree_1 ~ agree_t1 -0.207 -0.345 -0.069 -0.331 -2.940 0.003
goals ~~ d_agree_1 -0.035 -0.083 0.012 -0.148 -1.459 0.145
goals ~~ goals 0.897 0.555 1.238 1.000 5.150 0.000

Correlation of specific, facet-level change goals with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.148, p = 0.145.

6.4.1.9 Conscientiousness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
d_consc_1 ~ consc_t1       # This estimates the self-feedback parameter

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp4 <- lavaan(mi_lcs_consc_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 3900.313 3967.973 0.994 0.043 0.062
# parameters of interest
params_lcs_consc_curr_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                     "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.038 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.451 NA NA
d_consc_1 ~1 0.551 0.328 0.774 1.714 4.839 0.000
consc_t1 ~1 3.271 3.178 3.363 4.420 69.313 0.000
d_consc_1 ~~ d_consc_1 0.094 0.059 0.129 0.910 5.293 0.000
d_consc_1 ~ consc_t1 -0.130 -0.193 -0.067 -0.300 -4.053 0.000
d_consc_1 ~~ sb06_01_t1 0.011 -0.034 0.057 0.037 0.484 0.628
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.685 0.000

Correlation of general change goal with conscientiousness change score (current-self) is not significantly different from zero, r = 0.037, p = 0.628.

6.4.1.10 Conscientiousness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
d_consc_1 ~ consc_t1       # This estimates the self-feedback parameter

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp4 <- lavaan(mi_lcs_consc_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 3274.277 3341.937 0.996 0.024 0.029
# parameters of interest
params_lcs_consc_ideal_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.028 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.701 NA NA
d_consc_1 ~1 1.140 0.508 1.773 3.913 3.534 0.000
consc_t1 ~1 4.376 4.319 4.432 10.236 151.704 0.000
d_consc_1 ~~ d_consc_1 0.073 0.039 0.106 0.856 4.278 0.000
d_consc_1 ~ consc_t1 -0.259 -0.400 -0.118 -0.380 -3.599 0.000
d_consc_1 ~~ sb06_01_t1 0.011 -0.036 0.058 0.040 0.447 0.655
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.074 53.715 0.000

Correlation of general change goal with conscientiousness change score (ideal-self) is not significantly different from zero, r = 0.04, p = 0.655.

6.4.1.11 Conscientiousness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
d_consc_1 ~ consc_t1       # This estimates the self-feedback parameter

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp4 <- lavaan(mi_lcs_consc_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 5982.01 6075.982 0.94 0.114 0.213
# parameters of interest
params_lcs_consc_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.042 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.455 NA NA
d_consc_1 ~1 0.565 0.300 0.831 1.752 4.181 0.000
consc_t1 ~1 3.271 3.178 3.363 4.421 69.316 0.000
d_consc_1 ~~ d_consc_1 0.094 0.059 0.129 0.905 5.278 0.000
d_consc_1 ~ consc_t1 -0.135 -0.211 -0.058 -0.309 -3.448 0.001
goals ~~ d_consc_1 -0.003 -0.068 0.062 -0.009 -0.093 0.926
goals ~~ goals 1.296 0.981 1.611 1.000 8.063 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (current-self) is not significantly different from zero, r = -0.009, p = 0.926.

6.4.1.12 Conscientiousness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
d_consc_1 ~ consc_t1       # This estimates the self-feedback parameter

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp4 <- lavaan(mi_lcs_consc_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 5355.658 5449.631 1 0 0.028
# parameters of interest
params_lcs_consc_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.026 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.699 NA NA
d_consc_1 ~1 1.132 0.502 1.762 3.886 3.521 0.000
consc_t1 ~1 4.376 4.319 4.432 10.225 151.673 0.000
d_consc_1 ~~ d_consc_1 0.073 0.039 0.106 0.857 4.280 0.000
d_consc_1 ~ consc_t1 -0.257 -0.398 -0.116 -0.378 -3.584 0.000
goals ~~ d_consc_1 -0.016 -0.067 0.035 -0.051 -0.603 0.546
goals ~~ goals 1.297 0.980 1.614 1.000 8.026 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (ideal-self) is not significantly different from zero, r = -0.051, p = 0.546.

6.4.1.13 Neuroticism - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
d_neuro_1 ~ neuro_t1       # This estimates the self-feedback parameter

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp4 <- lavaan(mi_lcs_neuro_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 4489.18 4556.84 0.971 0.09 0.102
# parameters of interest
params_lcs_neuro_curr_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                     "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.003 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.590 NA NA
d_neuro_1 ~1 0.385 0.117 0.652 0.779 2.819 0.005
neuro_t1 ~1 3.532 3.432 3.631 4.208 69.620 0.000
d_neuro_1 ~~ d_neuro_1 0.222 0.151 0.293 0.911 6.147 0.000
d_neuro_1 ~ neuro_t1 -0.176 -0.251 -0.100 -0.298 -4.535 0.000
d_neuro_1 ~~ sb06_01_t1 -0.045 -0.109 0.018 -0.096 -1.407 0.159
sb06_01_t1 ~~ sb06_01_t1 1.001 0.852 1.149 1.000 13.224 0.000
sb06_01_t1 ~1 3.076 2.964 3.188 3.075 53.760 0.000

Correlation of general change goal with neuroticism change score (current-self) is not significantly different from zero, r = -0.096, p = 0.159.

6.4.1.14 Neuroticism - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
d_neuro_1 ~ neuro_t1       # This estimates the self-feedback parameter

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp4 <- lavaan(mi_lcs_neuro_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 3517.147 3584.807 1 0.009 0.042
# parameters of interest
params_lcs_neuro_ideal_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.983 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.706 NA NA
d_neuro_1 ~1 0.368 0.142 0.594 1.064 3.190 0.001
neuro_t1 ~1 1.643 1.581 1.705 3.408 51.983 0.000
d_neuro_1 ~~ d_neuro_1 0.106 0.066 0.146 0.888 5.193 0.000
d_neuro_1 ~ neuro_t1 -0.240 -0.386 -0.095 -0.335 -3.247 0.001
d_neuro_1 ~~ sb06_01_t1 -0.027 -0.080 0.025 -0.084 -1.033 0.302
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.218 0.000
sb06_01_t1 ~1 3.076 2.963 3.188 3.074 53.690 0.000

Correlation of general change goal with neuroticism change score (ideal-self) is not significantly different from zero, r = -0.084, p = 0.302.

6.4.1.15 Neuroticism - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
d_neuro_1 ~ neuro_t1       # This estimates the self-feedback parameter

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp4 <- lavaan(mi_lcs_neuro_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 6670.967 6764.94 0.906 0.14 0.22
# parameters of interest
params_lcs_neuro_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.073 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.676 NA NA
d_neuro_1 ~1 0.698 0.347 1.050 1.320 3.897 0.000
neuro_t1 ~1 3.532 3.433 3.631 4.207 69.640 0.000
d_neuro_1 ~~ d_neuro_1 0.230 0.155 0.306 0.824 6.018 0.000
d_neuro_1 ~ neuro_t1 -0.265 -0.365 -0.164 -0.420 -5.169 0.000
goals ~~ d_neuro_1 0.121 0.014 0.229 0.229 2.218 0.027
goals ~~ goals 1.216 0.853 1.579 1.000 6.566 0.000

The correlation of specific, facet-level change goals with neuroticism change score (current-self) is significantly different from zero, r = 0.229, p = 0.027.

6.4.1.16 Neuroticism - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
d_neuro_1 ~ neuro_t1       # This estimates the self-feedback parameter

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp4 <- lavaan(mi_lcs_neuro_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 5704.852 5798.825 0.992 0.032 0.031
# parameters of interest
params_lcs_neuro_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.979 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.700 NA NA
d_neuro_1 ~1 0.357 0.133 0.581 1.036 3.129 0.002
neuro_t1 ~1 1.643 1.581 1.705 3.407 51.981 0.000
d_neuro_1 ~~ d_neuro_1 0.106 0.066 0.146 0.893 5.160 0.000
d_neuro_1 ~ neuro_t1 -0.234 -0.377 -0.090 -0.327 -3.194 0.001
goals ~~ d_neuro_1 0.001 -0.055 0.057 0.003 0.043 0.966
goals ~~ goals 1.248 0.887 1.609 1.000 6.773 0.000

Correlation of specific, facet-level change goals with neuroticism change score (ideal-self) is not significantly different from zero, r = 0.003, p = 0.966.

6.4.1.17 Openness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
d_openn_1 ~ openn_t1       # This estimates the self-feedback parameter

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp4 <- lavaan(mi_lcs_openn_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 4017.956 4085.617 0.996 0.028 0.024
# parameters of interest
params_lcs_openn_curr_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                     "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.913 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.393 NA NA
d_openn_1 ~1 0.036 -0.270 0.342 0.191 0.232 0.817
openn_t1 ~1 3.553 3.486 3.619 8.064 104.804 0.000
d_openn_1 ~~ d_openn_1 0.036 0.014 0.058 1.000 3.248 0.001
d_openn_1 ~ openn_t1 0.008 -0.078 0.093 0.018 0.178 0.858
d_openn_1 ~~ sb06_01_t1 -0.012 -0.050 0.027 -0.061 -0.594 0.552
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.220 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.074 53.620 0.000

Correlation of general change goal with openness change score (current-self) is not significantly different from zero, r = -0.061, p = 0.552.

6.4.1.18 Openness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
d_openn_1 ~ openn_t1       # This estimates the self-feedback parameter

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp4 <- lavaan(mi_lcs_openn_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 18 3776.641 3844.302 0.982 0.05 0.058
# parameters of interest
params_lcs_openn_ideal_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.977 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.631 NA NA
d_openn_1 ~1 0.713 0.115 1.312 2.850 2.335 0.020
openn_t1 ~1 3.874 3.810 3.938 10.000 118.343 0.000
d_openn_1 ~~ d_openn_1 0.057 0.027 0.088 0.918 3.725 0.000
d_openn_1 ~ openn_t1 -0.185 -0.335 -0.034 -0.286 -2.408 0.016
d_openn_1 ~~ sb06_01_t1 -0.028 -0.075 0.019 -0.115 -1.154 0.249
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.150 1.000 13.234 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.073 53.653 0.000

Correlation of general change goal with openness change score (ideal-self) is not significantly different from zero, r = -0.115, p = 0.249.

6.4.1.19 Openness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
d_openn_1 ~ openn_t1       # This estimates the self-feedback parameter

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp4 <- lavaan(mi_lcs_openn_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 5973.64 6067.613 0.97 0.066 0.1
# parameters of interest
params_lcs_openn_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.897 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.382 NA NA
d_openn_1 ~1 -0.046 -0.360 0.268 -0.247 -0.289 0.773
openn_t1 ~1 3.553 3.487 3.619 8.102 104.865 0.000
d_openn_1 ~~ d_openn_1 0.035 0.013 0.056 0.995 3.166 0.002
d_openn_1 ~ openn_t1 0.031 -0.057 0.119 0.072 0.689 0.491
goals ~~ d_openn_1 0.029 0.003 0.054 0.247 2.221 0.026
goals ~~ goals 0.395 0.222 0.568 1.000 4.478 0.000

The correlation of specific, facet-level change goals with openness change score (current-self) is significantly different from zero, r = 0.247, p = 0.026.

6.4.1.20 Openness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
d_openn_1 ~ openn_t1       # This estimates the self-feedback parameter

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp4 <- lavaan(mi_lcs_openn_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 25 5737.696 5831.668 0.997 0.02 0.038
# parameters of interest
params_lcs_openn_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.987 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.645 NA NA
d_openn_1 ~1 0.773 0.208 1.339 3.057 2.683 0.007
openn_t1 ~1 3.874 3.810 3.938 9.998 118.367 0.000
d_openn_1 ~~ d_openn_1 0.058 0.028 0.088 0.906 3.747 0.000
d_openn_1 ~ openn_t1 -0.200 -0.342 -0.058 -0.307 -2.767 0.006
goals ~~ d_openn_1 0.015 -0.014 0.043 0.097 0.993 0.321
goals ~~ goals 0.395 0.223 0.568 1.000 4.501 0.000

Correlation of specific, facet-level change goals with openness change score (ideal-self) is not significantly different from zero, r = 0.097, p = 0.321.

6.4.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
d_facet_1 ~ facet_t1       # This estimates the self-feedback parameter

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with change goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sb06_01_t1 & sb07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sb06_01_t1"
      } else{
        goal_op = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), facet_model_fit))
      }
    }
  }
}  
6.4.2.1 Sociability - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7666.153 7748.849 0.944 0.081 0.067
# parameters of interest
params_lcs_socia_curr_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                     "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.001 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.618 NA NA
d_socia_1 ~1 0.745 0.455 1.035 1.414 5.032 0.000
socia_t1 ~1 2.780 2.647 2.913 3.256 40.920 0.000
d_socia_1 ~~ d_socia_1 0.251 0.150 0.352 0.904 4.861 0.000
d_socia_1 ~ socia_t1 -0.192 -0.289 -0.094 -0.311 -3.839 0.000
d_socia_1 ~~ sb06_01_t1 0.081 0.001 0.161 0.162 1.983 0.047
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.221 0.000
sb06_01_t1 ~1 3.077 2.965 3.190 3.076 53.648 0.000

The correlation of the general change goal with the sociability change score (current-self) is significantly different from zero, r = 0.162, p = 0.047.

6.4.2.2 Sociability - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7487.096 7569.792 0.968 0.044 0.051
# parameters of interest
params_lcs_socia_ideal_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                           "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.957 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.500 NA NA
d_socia_1 ~1 0.355 -0.296 1.006 1.559 1.069 0.285
socia_t1 ~1 4.185 4.104 4.266 9.596 101.705 0.000
d_socia_1 ~~ d_socia_1 0.050 -0.001 0.101 0.970 1.939 0.052
d_socia_1 ~ socia_t1 -0.091 -0.246 0.065 -0.173 -1.144 0.253
d_socia_1 ~~ sb06_01_t1 0.042 -0.011 0.096 0.187 1.540 0.124
sb06_01_t1 ~~ sb06_01_t1 1.001 0.852 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.074 53.706 0.000

Correlation of general change goal with sociability change score (ideal-self) is not significantly different from zero, r = 0.187, p = 0.124.

6.4.2.3 Sociability - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7779.632 7862.328 0.911 0.104 0.12
# parameters of interest
params_lcs_socia_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.032 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.656 NA NA
d_socia_1 ~1 0.856 0.541 1.171 1.588 5.329 0.000
socia_t1 ~1 2.781 2.648 2.914 3.278 41.012 0.000
d_socia_1 ~~ d_socia_1 0.252 0.151 0.353 0.866 4.885 0.000
d_socia_1 ~ socia_t1 -0.232 -0.338 -0.127 -0.366 -4.317 0.000
d_socia_1 ~~ sb07_01_t1 -0.058 -0.154 0.037 -0.097 -1.197 0.231
sb07_01_t1 ~~ sb07_01_t1 1.437 1.236 1.639 1.000 13.991 0.000

Correlation of specific, facet-level change goals with sociability change score (current-self) is not significantly different from zero, r = -0.097, p = 0.231.

6.4.2.4 Sociability - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7596.094 7678.789 0.941 0.061 0.07
# parameters of interest
params_lcs_socia_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.969 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.520 NA NA
d_socia_1 ~1 0.444 -0.216 1.104 1.908 1.319 0.187
socia_t1 ~1 4.185 4.104 4.265 9.650 101.713 0.000
d_socia_1 ~~ d_socia_1 0.052 0.002 0.102 0.957 2.019 0.044
d_socia_1 ~ socia_t1 -0.112 -0.269 0.045 -0.208 -1.394 0.163
d_socia_1 ~~ sb07_01_t1 0.062 0.000 0.124 0.228 1.959 0.050
sb07_01_t1 ~~ sb07_01_t1 1.437 1.236 1.638 1.000 13.988 0.000

The correlation of specific, facet-level change goals with the anxiety change score (ideal-self) is (barely) significantly different from zero, r = 0.228, p = 0.05.

6.4.2.5 Assertiveness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8008.14 8090.836 0.988 0.031 0.049
# parameters of interest
params_lcs_asser_curr_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                     "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.997 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.351 NA NA
d_asser_1 ~1 0.231 -0.106 0.569 1.155 1.344 0.179
asser_t1 ~1 3.035 2.926 3.144 5.331 54.553 0.000
d_asser_1 ~~ d_asser_1 0.039 -0.004 0.082 0.972 1.789 0.074
d_asser_1 ~ asser_t1 -0.059 -0.171 0.053 -0.168 -1.036 0.300
d_asser_1 ~~ sb06_01_t1 0.010 -0.048 0.067 0.049 0.328 0.743
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.076 2.963 3.188 3.074 53.712 0.000

Correlation of general change goal with assertiveness change score (current-self) is not significantly different from zero, r = 0.049, p = 0.743.

6.4.2.6 Assertiveness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7892.201 7974.897 0.996 0.012 0.041
# parameters of interest
params_lcs_asser_ideal_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                           "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.933 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.584 NA NA
d_asser_1 ~1 0.456 -0.276 1.189 2.419 1.222 0.222
asser_t1 ~1 4.051 3.959 4.143 13.441 86.224 0.000
d_asser_1 ~~ d_asser_1 0.034 0.000 0.068 0.962 1.963 0.050
d_asser_1 ~ asser_t1 -0.122 -0.300 0.057 -0.194 -1.338 0.181
d_asser_1 ~~ sb06_01_t1 0.037 -0.002 0.076 0.201 1.876 0.061
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.221 0.000
sb06_01_t1 ~1 3.076 2.963 3.188 3.074 53.699 0.000

Correlation of general change goal with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.201, p = 0.061.

6.4.2.7 Assertiveness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8105.365 8188.061 0.948 0.065 0.081
# parameters of interest
params_lcs_asser_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.994 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.347 NA NA
d_asser_1 ~1 0.219 -0.127 0.565 1.100 1.240 0.215
asser_t1 ~1 3.035 2.925 3.144 5.318 54.526 0.000
d_asser_1 ~~ d_asser_1 0.039 -0.004 0.082 0.975 1.763 0.078
d_asser_1 ~ asser_t1 -0.055 -0.171 0.061 -0.158 -0.931 0.352
d_asser_1 ~~ sb07_02_t1 0.014 -0.048 0.075 0.060 0.440 0.660
sb07_02_t1 ~~ sb07_02_t1 1.377 1.195 1.559 1.000 14.838 0.000

Correlation of specific, facet-level change goals with assertiveness change score (current-self) is not significantly different from zero, r = 0.06, p = 0.66.

6.4.2.8 Assertiveness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7993.148 8075.844 0.955 0.044 0.065
# parameters of interest
params_lcs_asser_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.934 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.585 NA NA
d_asser_1 ~1 0.458 -0.292 1.209 2.410 1.197 0.231
asser_t1 ~1 4.051 3.959 4.143 13.341 86.308 0.000
d_asser_1 ~~ d_asser_1 0.035 0.000 0.070 0.962 1.943 0.052
d_asser_1 ~ asser_t1 -0.122 -0.305 0.061 -0.195 -1.311 0.190
d_asser_1 ~~ sb07_02_t1 0.018 -0.026 0.062 0.082 0.807 0.420
sb07_02_t1 ~~ sb07_02_t1 1.377 1.195 1.559 1.000 14.837 0.000

Correlation of specific, facet-level change goals with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.082, p = 0.42.

6.4.2.9 Energy - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7950.008 8032.704 0.935 0.076 0.08
# parameters of interest
params_lcs_energ_curr_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                     "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.980 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.550 NA NA
d_energ_1 ~1 0.265 -0.031 0.560 1.069 1.756 0.079
energ_t1 ~1 2.682 2.574 2.789 6.078 48.943 0.000
d_energ_1 ~~ d_energ_1 0.058 0.017 0.098 0.940 2.807 0.005
d_energ_1 ~ energ_t1 -0.137 -0.247 -0.028 -0.245 -2.460 0.014
d_energ_1 ~~ sb06_01_t1 -0.018 -0.063 0.026 -0.076 -0.808 0.419
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.076 2.964 3.189 3.075 53.655 0.000

Correlation of general change goal with energy change score (current-self) is not significantly different from zero, r = -0.076, p = 0.419.

6.4.2.10 Energy - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7470.21 7552.905 0.946 0.048 0.051
# parameters of interest
params_lcs_energ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                           "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.936 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.659 NA NA
d_energ_1 ~1 0.425 -0.067 0.918 1.581 1.691 0.091
energ_t1 ~1 2.244 2.132 2.357 5.876 39.073 0.000
d_energ_1 ~~ d_energ_1 0.068 0.009 0.126 0.937 2.266 0.023
d_energ_1 ~ energ_t1 -0.177 -0.405 0.051 -0.252 -1.525 0.127
d_energ_1 ~~ sb06_01_t1 -0.031 -0.084 0.022 -0.119 -1.136 0.256
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.076 2.964 3.188 3.075 53.696 0.000

Correlation of general change goal with energy change score (ideal-self) is not significantly different from zero, r = -0.119, p = 0.256.

6.4.2.11 Energy - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8080.601 8163.297 0.903 0.094 0.097
# parameters of interest
params_lcs_energ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.006 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.581 NA NA
d_energ_1 ~1 0.360 0.053 0.666 1.414 2.302 0.021
energ_t1 ~1 2.681 2.574 2.789 6.095 48.904 0.000
d_energ_1 ~~ d_energ_1 0.059 0.018 0.100 0.911 2.822 0.005
d_energ_1 ~ energ_t1 -0.173 -0.286 -0.059 -0.299 -2.986 0.003
d_energ_1 ~~ sb07_03_t1 0.031 -0.019 0.081 0.103 1.212 0.226
sb07_03_t1 ~~ sb07_03_t1 1.539 1.321 1.757 1.000 13.834 0.000

Correlation of specific, facet-level change goals with energy change score (current-self) is not significantly different from zero, r = 0.103, p = 0.226.

6.4.2.12 Energy - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7601.961 7684.657 0.946 0.048 0.058
# parameters of interest
params_lcs_energ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.926 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.641 NA NA
d_energ_1 ~1 0.379 -0.126 0.884 1.443 1.473 0.141
energ_t1 ~1 2.244 2.132 2.357 5.912 39.082 0.000
d_energ_1 ~~ d_energ_1 0.066 0.008 0.123 0.949 2.237 0.025
d_energ_1 ~ energ_t1 -0.157 -0.390 0.077 -0.226 -1.316 0.188
d_energ_1 ~~ sb07_03_t1 0.031 -0.034 0.096 0.098 0.932 0.351
sb07_03_t1 ~~ sb07_03_t1 1.539 1.321 1.757 1.000 13.834 0.000

Correlation of specific, facet-level change goals with energy change score (ideal-self) is not significantly different from zero, r = 0.098, p = 0.351.

6.4.2.13 Compassion - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7717.247 7799.943 0.99 0.024 0.04
# parameters of interest
params_lcs_compa_curr_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                     "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.149 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.351 NA NA
d_compa_1 ~1 0.791 0.277 1.305 3.762 3.014 0.003
compa_t1 ~1 4.175 4.080 4.270 6.061 86.105 0.000
d_compa_1 ~~ d_compa_1 0.031 -0.032 0.094 0.699 0.965 0.335
d_compa_1 ~ compa_t1 -0.168 -0.286 -0.049 -0.549 -2.760 0.006
d_compa_1 ~~ sb06_01_t1 0.018 -0.032 0.068 0.102 0.697 0.486
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.076 2.963 3.188 3.074 53.660 0.000

Correlation of general change goal with compassion change score (current-self) is not significantly different from zero, r = 0.102, p = 0.486.

6.4.2.14 Compassion - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8030.888 8113.584 0.982 0.027 0.045
# parameters of interest
params_lcs_compa_ideal_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                           "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.053 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.660 NA NA
d_compa_1 ~1 1.035 0.158 1.912 2.612 2.314 0.021
compa_t1 ~1 4.207 4.109 4.305 6.653 84.403 0.000
d_compa_1 ~~ d_compa_1 0.133 0.048 0.218 0.847 3.080 0.002
d_compa_1 ~ compa_t1 -0.245 -0.445 -0.046 -0.391 -2.408 0.016
d_compa_1 ~~ sb06_01_t1 0.015 -0.067 0.096 0.040 0.351 0.725
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.076 2.963 3.188 3.074 53.657 0.000

Correlation of general change goal with compassion change score (ideal-self) is not significantly different from zero, r = 0.04, p = 0.725.

6.4.2.15 Compassion - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7917.002 7999.698 0.974 0.039 0.06
# parameters of interest
params_lcs_compa_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.154 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.356 NA NA
d_compa_1 ~1 0.810 0.285 1.334 3.834 3.026 0.002
compa_t1 ~1 4.175 4.080 4.270 6.098 86.170 0.000
d_compa_1 ~~ d_compa_1 0.031 -0.031 0.093 0.689 0.968 0.333
d_compa_1 ~ compa_t1 -0.172 -0.294 -0.050 -0.558 -2.768 0.006
d_compa_1 ~~ sb07_04_t1 -0.025 -0.109 0.059 -0.103 -0.581 0.561
sb07_04_t1 ~~ sb07_04_t1 1.927 1.727 2.126 1.000 18.947 0.000

Correlation of specific, facet-level change goals with compassion change score (current-self) is not significantly different from zero, r = -0.103, p = 0.561.

6.4.2.16 Compassion - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8230.106 8312.802 0.981 0.028 0.046
# parameters of interest
params_lcs_compa_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.056 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.666 NA NA
d_compa_1 ~1 1.057 0.198 1.915 2.639 2.412 0.016
compa_t1 ~1 4.207 4.109 4.305 6.624 84.339 0.000
d_compa_1 ~~ d_compa_1 0.135 0.051 0.219 0.842 3.134 0.002
d_compa_1 ~ compa_t1 -0.250 -0.446 -0.055 -0.397 -2.510 0.012
d_compa_1 ~~ sb07_04_t1 -0.042 -0.156 0.072 -0.083 -0.725 0.468
sb07_04_t1 ~~ sb07_04_t1 1.927 1.727 2.126 1.000 18.948 0.000

Correlation of specific, facet-level change goals with compassion change score (ideal-self) is not significantly different from zero, r = -0.083, p = 0.468.

6.4.2.17 Respectfulness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7059.719 7142.415 0.954 0.063 0.054
# parameters of interest
params_lcs_respe_curr_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                     "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.099 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.604 NA NA
d_respe_1 ~1 1.104 0.591 1.617 3.427 4.217 0.000
respe_t1 ~1 4.391 4.309 4.474 7.499 104.075 0.000
d_respe_1 ~~ d_respe_1 0.084 0.044 0.125 0.814 4.084 0.000
d_respe_1 ~ respe_t1 -0.237 -0.349 -0.126 -0.432 -4.161 0.000
d_respe_1 ~~ sb06_01_t1 -0.040 -0.093 0.012 -0.139 -1.500 0.134
sb06_01_t1 ~~ sb06_01_t1 1.001 0.852 1.149 1.000 13.225 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.074 53.680 0.000

Correlation of general change goal with respectfulness change score (current-self) is not significantly different from zero, r = -0.139, p = 0.134.

6.4.2.18 Respectfulness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 6535.491 6618.187 0.932 0.065 0.061
# parameters of interest
params_lcs_respe_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                           "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.162 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.715 NA NA
d_respe_1 ~1 1.502 0.653 2.351 5.600 3.467 0.001
respe_t1 ~1 4.615 4.545 4.685 10.591 128.974 0.000
d_respe_1 ~~ d_respe_1 0.053 0.013 0.092 0.731 2.610 0.009
d_respe_1 ~ respe_t1 -0.319 -0.498 -0.140 -0.519 -3.491 0.000
d_respe_1 ~~ sb06_01_t1 -0.006 -0.049 0.037 -0.026 -0.273 0.785
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.693 0.000

Correlation of general change goal with respectfulness change score (ideal-self) is not significantly different from zero, r = -0.026, p = 0.785.

6.4.2.19 Respectfulness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7237.265 7319.961 0.905 0.092 0.103
# parameters of interest
params_lcs_respe_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.093 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.595 NA NA
d_respe_1 ~1 1.069 0.539 1.599 3.356 3.957 0.000
respe_t1 ~1 4.391 4.309 4.474 7.500 104.062 0.000
d_respe_1 ~~ d_respe_1 0.083 0.043 0.124 0.822 4.046 0.000
d_respe_1 ~ respe_t1 -0.230 -0.346 -0.113 -0.422 -3.851 0.000
d_respe_1 ~~ sb07_05_t1 0.009 -0.070 0.087 0.023 0.220 0.826
sb07_05_t1 ~~ sb07_05_t1 1.777 1.558 1.996 1.000 15.883 0.000

Correlation of specific, facet-level change goals with respectfulness change score (current-self) is not significantly different from zero, r = 0.023, p = 0.826.

6.4.2.20 Respectfulness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 6706.441 6789.137 0.935 0.064 0.061
# parameters of interest
params_lcs_respe_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.170 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.729 NA NA
d_respe_1 ~1 1.547 0.699 2.395 5.697 3.575 0.000
respe_t1 ~1 4.615 4.545 4.685 10.599 128.949 0.000
d_respe_1 ~~ d_respe_1 0.053 0.014 0.093 0.722 2.634 0.008
d_respe_1 ~ respe_t1 -0.329 -0.508 -0.150 -0.528 -3.598 0.000
d_respe_1 ~~ sb07_05_t1 -0.057 -0.114 0.000 -0.186 -1.974 0.048
sb07_05_t1 ~~ sb07_05_t1 1.777 1.558 1.996 1.000 15.884 0.000

The correlation of specific, facet-level change goals with the respectfulness change score (ideal-self) is significantly different from zero, r = -0.186, p = 0.048.

6.4.2.21 Trust - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8074.337 8157.033 0.946 0.062 0.049
# parameters of interest
params_lcs_trust_curr_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                     "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.031 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.562 NA NA
d_trust_1 ~1 0.386 -0.007 0.778 1.181 1.927 0.054
trust_t1 ~1 2.893 2.772 3.014 4.825 46.995 0.000
d_trust_1 ~~ d_trust_1 0.095 0.016 0.175 0.894 2.348 0.019
d_trust_1 ~ trust_t1 -0.178 -0.317 -0.038 -0.326 -2.499 0.012
d_trust_1 ~~ sb06_01_t1 -0.020 -0.080 0.041 -0.063 -0.636 0.525
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.224 0.000
sb06_01_t1 ~1 3.076 2.964 3.188 3.075 53.685 0.000

Correlation of general change goal with trust change score (current-self) is not significantly different from zero, r = -0.063, p = 0.525.

6.4.2.22 Trust - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7643.513 7726.209 0.952 0.051 0.052
# parameters of interest
params_lcs_trust_ideal_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                           "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.980 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.575 NA NA
d_trust_1 ~1 0.272 -0.032 0.576 1.197 1.756 0.079
trust_t1 ~1 1.957 1.865 2.050 5.051 41.380 0.000
d_trust_1 ~~ d_trust_1 0.048 0.009 0.088 0.933 2.386 0.017
d_trust_1 ~ trust_t1 -0.151 -0.313 0.011 -0.258 -1.829 0.067
d_trust_1 ~~ sb06_01_t1 0.002 -0.039 0.044 0.011 0.115 0.908
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.696 0.000

Correlation of general change goal with trust change score (ideal-self) is not significantly different from zero, r = 0.011, p = 0.908.

6.4.2.23 Trust - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8252.613 8335.309 0.938 0.067 0.057
# parameters of interest
params_lcs_trust_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.030 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.560 NA NA
d_trust_1 ~1 0.381 -0.011 0.774 1.167 1.903 0.057
trust_t1 ~1 2.893 2.773 3.014 4.811 47.028 0.000
d_trust_1 ~~ d_trust_1 0.095 0.016 0.175 0.894 2.341 0.019
d_trust_1 ~ trust_t1 -0.176 -0.316 -0.037 -0.325 -2.484 0.013
d_trust_1 ~~ sb07_06_t1 -0.013 -0.096 0.070 -0.032 -0.314 0.753
sb07_06_t1 ~~ sb07_06_t1 1.794 1.613 1.974 1.000 19.504 0.000

Correlation of specific, facet-level change goals with trust change score (current-self) is not significantly different from zero, r = -0.032, p = 0.753.

6.4.2.24 Trust - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7821.167 7903.863 0.942 0.057 0.052
# parameters of interest
params_lcs_trust_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.978 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.571 NA NA
d_trust_1 ~1 0.265 -0.044 0.575 1.174 1.679 0.093
trust_t1 ~1 1.957 1.864 2.050 5.064 41.378 0.000
d_trust_1 ~~ d_trust_1 0.048 0.008 0.087 0.936 2.368 0.018
d_trust_1 ~ trust_t1 -0.148 -0.313 0.018 -0.252 -1.748 0.080
d_trust_1 ~~ sb07_06_t1 0.016 -0.045 0.076 0.054 0.515 0.607
sb07_06_t1 ~~ sb07_06_t1 1.794 1.613 1.974 1.000 19.498 0.000

Correlation of specific, facet-level change goals with trust change score (ideal-self) is not significantly different from zero, r = 0.054, p = 0.607.

6.4.2.25 Organization - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7647.469 7730.165 0.981 0.051 0.048
# parameters of interest
params_lcs_organ_curr_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                     "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.078 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.516 NA NA
d_organ_1 ~1 0.375 0.173 0.577 0.734 3.641 0.000
organ_t1 ~1 2.819 2.671 2.967 2.640 37.419 0.000
d_organ_1 ~~ d_organ_1 0.222 0.122 0.323 0.852 4.351 0.000
d_organ_1 ~ organ_t1 -0.184 -0.259 -0.109 -0.384 -4.802 0.000
d_organ_1 ~~ sb06_01_t1 -0.067 -0.149 0.016 -0.141 -1.580 0.114
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.150 1.000 13.220 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.686 0.000

Correlation of general change goal with organization change score (current-self) is not significantly different from zero, r = -0.141, p = 0.114.

6.4.2.26 Organization - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 6680.01 6762.705 0.931 0.054 0.057
# parameters of interest
params_lcs_organ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                           "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.071 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.816 NA NA
d_organ_1 ~1 0.559 0.291 0.827 1.570 4.092 0.000
organ_t1 ~1 1.678 1.577 1.778 3.586 32.611 0.000
d_organ_1 ~~ d_organ_1 0.100 0.041 0.158 0.783 3.325 0.001
d_organ_1 ~ organ_t1 -0.355 -0.520 -0.189 -0.465 -4.195 0.000
d_organ_1 ~~ sb06_01_t1 -0.023 -0.083 0.037 -0.073 -0.751 0.452
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.687 0.000

Correlation of general change goal with organization change score (ideal-self) is not significantly different from zero, r = -0.073, p = 0.452.

6.4.2.27 Organization - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7883.605 7966.301 0.881 0.132 0.155
# parameters of interest
params_lcs_organ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.111 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.556 NA NA
d_organ_1 ~1 0.477 0.215 0.740 0.895 3.565 0.000
organ_t1 ~1 2.819 2.671 2.966 2.644 37.420 0.000
d_organ_1 ~~ d_organ_1 0.229 0.128 0.331 0.806 4.416 0.000
d_organ_1 ~ organ_t1 -0.220 -0.317 -0.123 -0.440 -4.446 0.000
d_organ_1 ~~ sb07_07_t1 0.077 -0.063 0.217 0.110 1.076 0.282
sb07_07_t1 ~~ sb07_07_t1 2.159 1.943 2.376 1.000 19.525 0.000

Correlation of specific, facet-level change goals with organization change score (current-self) is not significantly different from zero, r = 0.11, p = 0.282.

6.4.2.28 Organization - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 6913.735 6996.431 0.94 0.05 0.056
# parameters of interest
params_lcs_organ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.068 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.816 NA NA
d_organ_1 ~1 0.559 0.292 0.826 1.580 4.102 0.000
organ_t1 ~1 1.677 1.577 1.778 3.623 32.660 0.000
d_organ_1 ~~ d_organ_1 0.098 0.040 0.156 0.786 3.321 0.001
d_organ_1 ~ organ_t1 -0.354 -0.519 -0.189 -0.463 -4.196 0.000
d_organ_1 ~~ sb07_07_t1 0.048 -0.035 0.130 0.103 1.133 0.257
sb07_07_t1 ~~ sb07_07_t1 2.159 1.943 2.376 1.000 19.536 0.000

Correlation of specific, facet-level change goals with organization change score (ideal-self) is not significantly different from zero, r = 0.103, p = 0.257.

6.4.2.29 Productiveness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7606.687 7689.383 0.959 0.066 0.066
# parameters of interest
params_lcs_produ_curr_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                     "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.045 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.484 NA NA
d_produ_1 ~1 0.336 -0.002 0.674 0.957 1.948 0.051
produ_t1 ~1 3.354 3.224 3.484 4.418 50.618 0.000
d_produ_1 ~~ d_produ_1 0.110 0.054 0.167 0.896 3.845 0.000
d_produ_1 ~ produ_t1 -0.149 -0.251 -0.048 -0.323 -2.880 0.004
d_produ_1 ~~ sb06_01_t1 0.004 -0.053 0.062 0.012 0.139 0.890
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.680 0.000

Correlation of general change goal with productiveness change score (current-self) is not significantly different from zero, r = 0.012, p = 0.89.

6.4.2.30 Productiveness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 6226.929 6309.625 0.943 0.054 0.053
# parameters of interest
params_lcs_produ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                           "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.113 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.831 NA NA
d_produ_1 ~1 0.606 0.321 0.890 1.803 4.172 0.000
produ_t1 ~1 1.630 1.544 1.717 3.621 37.055 0.000
d_produ_1 ~~ d_produ_1 0.084 0.023 0.146 0.747 2.680 0.007
d_produ_1 ~ produ_t1 -0.375 -0.557 -0.193 -0.503 -4.048 0.000
d_produ_1 ~~ sb06_01_t1 0.004 -0.051 0.059 0.014 0.142 0.887
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.695 0.000

Correlation of general change goal with productiveness change score (ideal-self) is not significantly different from zero, r = 0.014, p = 0.887.

6.4.2.31 Productiveness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7763.107 7845.803 0.916 0.096 0.123
# parameters of interest
params_lcs_produ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.055 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.496 NA NA
d_produ_1 ~1 0.376 0.007 0.745 1.057 1.998 0.046
produ_t1 ~1 3.354 3.224 3.484 4.427 50.604 0.000
d_produ_1 ~~ d_produ_1 0.112 0.056 0.168 0.882 3.927 0.000
d_produ_1 ~ produ_t1 -0.161 -0.273 -0.050 -0.343 -2.845 0.004
d_produ_1 ~~ sb07_08_t1 0.026 -0.057 0.109 0.060 0.611 0.542
sb07_08_t1 ~~ sb07_08_t1 1.673 1.417 1.930 1.000 12.796 0.000

Correlation of specific, facet-level change goals with productiveness change score (current-self) is not significantly different from zero, r = 0.06, p = 0.542.

6.4.2.32 Productiveness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 6383.46 6466.156 0.953 0.049 0.053
# parameters of interest
params_lcs_produ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.111 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.827 NA NA
d_produ_1 ~1 0.601 0.319 0.882 1.794 4.183 0.000
produ_t1 ~1 1.630 1.544 1.717 3.623 37.071 0.000
d_produ_1 ~~ d_produ_1 0.084 0.022 0.146 0.750 2.672 0.008
d_produ_1 ~ produ_t1 -0.372 -0.552 -0.192 -0.500 -4.058 0.000
d_produ_1 ~~ sb07_08_t1 0.016 -0.046 0.077 0.042 0.498 0.618
sb07_08_t1 ~~ sb07_08_t1 1.673 1.417 1.930 1.000 12.793 0.000

Correlation of specific, facet-level change goals with productiveness change score (ideal-self) is not significantly different from zero, r = 0.042, p = 0.618.

6.4.2.33 Responsibility - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7653.747 7736.443 0.92 0.083 0.084
# parameters of interest
params_lcs_respo_curr_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                     "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.003 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.442 NA NA
d_respo_1 ~1 0.413 0.043 0.783 2.022 2.189 0.029
respo_t1 ~1 3.619 3.517 3.721 7.811 69.694 0.000
d_respo_1 ~~ d_respo_1 0.040 0.004 0.075 0.948 2.173 0.030
d_respo_1 ~ respo_t1 -0.100 -0.200 -0.001 -0.228 -1.975 0.048
d_respo_1 ~~ sb06_01_t1 -0.036 -0.078 0.007 -0.179 -1.647 0.100
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.077 2.965 3.189 3.076 53.742 0.000

Correlation of general change goal with responsibility change score (current-self) is not significantly different from zero, r = -0.179, p = 0.1.

6.4.2.34 Responsibility - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7089.666 7172.362 0.982 0.029 0.043
# parameters of interest
params_lcs_respo_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                           "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.933 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.550 NA NA
d_respo_1 ~1 0.389 -0.359 1.137 1.499 1.020 0.308
respo_t1 ~1 4.259 4.151 4.366 9.670 77.659 0.000
d_respo_1 ~~ d_respo_1 0.065 0.018 0.113 0.971 2.697 0.007
d_respo_1 ~ respo_t1 -0.100 -0.270 0.071 -0.169 -1.148 0.251
d_respo_1 ~~ sb06_01_t1 0.003 -0.052 0.058 0.010 0.095 0.925
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.678 0.000

Correlation of general change goal with responsibility change score (ideal-self) is not significantly different from zero, r = 0.01, p = 0.925.

6.4.2.35 Responsibility - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7896.304 7979 0.876 0.106 0.119
# parameters of interest
params_lcs_respo_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.018 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.461 NA NA
d_respo_1 ~1 0.485 0.097 0.874 2.311 2.451 0.014
respo_t1 ~1 3.619 3.517 3.721 7.804 69.693 0.000
d_respo_1 ~~ d_respo_1 0.041 0.005 0.077 0.929 2.225 0.026
d_respo_1 ~ respo_t1 -0.120 -0.226 -0.015 -0.266 -2.242 0.025
d_respo_1 ~~ sb07_09_t1 -0.047 -0.114 0.021 -0.155 -1.359 0.174
sb07_09_t1 ~~ sb07_09_t1 2.210 2.019 2.400 1.000 22.757 0.000

Correlation of specific, facet-level change goals with responsibility change score (current-self) is not significantly different from zero, r = -0.155, p = 0.174.

6.4.2.36 Responsibility - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7331.213 7413.909 0.996 0.013 0.04
# parameters of interest
params_lcs_respo_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.933 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.551 NA NA
d_respo_1 ~1 0.390 -0.362 1.143 1.506 1.017 0.309
respo_t1 ~1 4.259 4.151 4.366 9.691 77.659 0.000
d_respo_1 ~~ d_respo_1 0.065 0.018 0.113 0.971 2.711 0.007
d_respo_1 ~ respo_t1 -0.100 -0.271 0.071 -0.169 -1.143 0.253
d_respo_1 ~~ sb07_09_t1 -0.005 -0.086 0.076 -0.012 -0.113 0.910
sb07_09_t1 ~~ sb07_09_t1 2.210 2.019 2.400 1.000 22.758 0.000

Correlation of specific, facet-level change goals with responsibility change score (ideal-self) is not significantly different from zero, r = -0.012, p = 0.91.

6.4.2.37 Anxiety - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8003.471 8086.166 0.964 0.055 0.066
# parameters of interest
params_lcs_anxie_curr_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                     "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.064 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.653 NA NA
d_anxie_1 ~1 0.908 0.582 1.235 1.606 5.453 0.000
anxie_t1 ~1 2.778 2.643 2.913 3.015 40.335 0.000
d_anxie_1 ~~ d_anxie_1 0.268 0.125 0.411 0.838 3.679 0.000
d_anxie_1 ~ anxie_t1 -0.247 -0.360 -0.134 -0.402 -4.285 0.000
d_anxie_1 ~~ sb06_01_t1 0.057 -0.022 0.135 0.109 1.412 0.158
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.222 0.000
sb06_01_t1 ~1 3.076 2.964 3.188 3.075 53.728 0.000

Correlation of general change goal with anxiety change score (current-self) is not significantly different from zero, r = 0.109, p = 0.158.

6.4.2.38 Anxiety - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7722.895 7805.591 1 0 0.049
# parameters of interest
params_lcs_anxie_ideal_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                           "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.205 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.768 NA NA
d_anxie_1 ~1 1.667 0.742 2.593 9.150 3.532 0.000
anxie_t1 ~1 4.555 4.487 4.624 15.931 130.256 0.000
d_anxie_1 ~~ d_anxie_1 0.023 -0.002 0.047 0.684 1.831 0.067
d_anxie_1 ~ anxie_t1 -0.358 -0.558 -0.158 -0.562 -3.514 0.000
d_anxie_1 ~~ sb06_01_t1 0.010 -0.022 0.043 0.069 0.629 0.530
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.222 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.689 0.000

Correlation of general change goal with anxiety change score (ideal-self) is not significantly different from zero, r = 0.069, p = 0.53.

6.4.2.39 Anxiety - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8252.173 8334.869 0.865 0.113 0.138
# parameters of interest
params_lcs_anxie_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.149 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.782 NA NA
d_anxie_1 ~1 1.203 0.814 1.592 1.918 6.068 0.000
anxie_t1 ~1 2.779 2.644 2.914 3.018 40.385 0.000
d_anxie_1 ~~ d_anxie_1 0.288 0.143 0.432 0.731 3.897 0.000
d_anxie_1 ~ anxie_t1 -0.353 -0.490 -0.216 -0.518 -5.041 0.000
d_anxie_1 ~~ sb07_10_t1 -0.218 -0.376 -0.060 -0.267 -2.707 0.007
sb07_10_t1 ~~ sb07_10_t1 2.315 2.071 2.558 1.000 18.644 0.000

The correlation of specific, facet-level change goals with the anxiety change score (current-self) is significantly different from zero, r = -0.267, p = 0.007.

6.4.2.40 Anxiety - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7978.25 8060.946 0.981 0.025 0.05
# parameters of interest
params_lcs_anxie_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.197 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.755 NA NA
d_anxie_1 ~1 1.628 0.718 2.539 9.022 3.504 0.000
anxie_t1 ~1 4.555 4.487 4.624 15.916 130.280 0.000
d_anxie_1 ~~ d_anxie_1 0.023 -0.002 0.047 0.692 1.820 0.069
d_anxie_1 ~ anxie_t1 -0.350 -0.547 -0.153 -0.555 -3.486 0.000
d_anxie_1 ~~ sb07_10_t1 0.021 -0.023 0.064 0.090 0.930 0.353
sb07_10_t1 ~~ sb07_10_t1 2.315 2.071 2.558 1.000 18.650 0.000

Correlation of specific, facet-level change goals with anxiety change score (ideal-self) is not significantly different from zero, r = 0.09, p = 0.353.

6.4.2.41 Depression - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7851.595 7934.291 0.926 0.101 0.107
# parameters of interest
params_lcs_depre_curr_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                     "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.951 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.539 NA NA
d_depre_1 ~1 0.479 0.230 0.728 1.275 3.773 0.000
depre_t1 ~1 2.931 2.807 3.055 4.423 46.361 0.000
d_depre_1 ~~ d_depre_1 0.136 0.076 0.196 0.964 4.420 0.000
d_depre_1 ~ depre_t1 -0.108 -0.192 -0.024 -0.191 -2.533 0.011
d_depre_1 ~~ sb06_01_t1 0.021 -0.031 0.074 0.058 0.794 0.427
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.076 2.964 3.188 3.074 53.709 0.000

Correlation of general change goal with depression change score (current-self) is not significantly different from zero, r = 0.058, p = 0.427.

6.4.2.42 Depression - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 6327.295 6409.991 0.911 0.068 0.065
# parameters of interest
params_lcs_depre_ideal_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                           "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.926 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.795 NA NA
d_depre_1 ~1 1.262 0.201 2.324 4.040 2.330 0.020
depre_t1 ~1 4.418 4.345 4.491 12.131 118.664 0.000
d_depre_1 ~~ d_depre_1 0.087 0.038 0.135 0.889 3.506 0.000
d_depre_1 ~ depre_t1 -0.285 -0.520 -0.051 -0.333 -2.382 0.017
d_depre_1 ~~ sb06_01_t1 0.035 -0.018 0.088 0.117 1.281 0.200
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.150 1.000 13.202 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.073 53.692 0.000

Correlation of general change goal with depression change score (ideal-self) is not significantly different from zero, r = 0.117, p = 0.2.

6.4.2.43 Depression - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8123.727 8206.422 0.848 0.152 0.174
# parameters of interest
params_lcs_depre_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.035 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.652 NA NA
d_depre_1 ~1 0.842 0.477 1.207 2.025 4.522 0.00
depre_t1 ~1 2.931 2.807 3.055 4.435 46.365 0.00
d_depre_1 ~~ d_depre_1 0.150 0.085 0.214 0.864 4.529 0.00
d_depre_1 ~ depre_t1 -0.232 -0.358 -0.105 -0.368 -3.597 0.00
d_depre_1 ~~ sb07_11_t1 -0.172 -0.302 -0.042 -0.281 -2.591 0.01
sb07_11_t1 ~~ sb07_11_t1 2.511 2.299 2.723 1.000 23.186 0.00

The correlation of specific, facet-level change goals with the depression change score (current-self) is significantly different from zero, r = -0.281, p = 0.01.

6.4.2.44 Depression - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 6607.643 6690.339 0.928 0.061 0.06
# parameters of interest
params_lcs_depre_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.922 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.784 NA NA
d_depre_1 ~1 1.210 0.177 2.242 3.871 2.296 0.022
depre_t1 ~1 4.418 4.345 4.491 12.033 118.603 0.000
d_depre_1 ~~ d_depre_1 0.088 0.039 0.136 0.897 3.514 0.000
d_depre_1 ~ depre_t1 -0.273 -0.502 -0.045 -0.321 -2.349 0.019
d_depre_1 ~~ sb07_11_t1 -0.054 -0.125 0.017 -0.115 -1.492 0.136
sb07_11_t1 ~~ sb07_11_t1 2.510 2.297 2.722 1.000 23.159 0.000

Correlation of specific, facet-level change goals with the depression change score (ideal-self) is not significantly different from zero, r = -0.115, p = 0.136.

6.4.2.45 Volatility - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7988.185 8070.881 0.984 0.043 0.061
# parameters of interest
params_lcs_volat_curr_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                     "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.076 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.605 NA NA
d_volat_1 ~1 0.529 0.275 0.783 1.054 4.075 0.000
volat_t1 ~1 3.257 3.124 3.389 3.649 48.115 0.000
d_volat_1 ~~ d_volat_1 0.211 0.134 0.288 0.838 5.361 0.000
d_volat_1 ~ volat_t1 -0.226 -0.302 -0.150 -0.402 -5.816 0.000
d_volat_1 ~~ sb06_01_t1 0.017 -0.060 0.093 0.036 0.423 0.672
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.074 53.739 0.000

Correlation of general change goal with volatility change score (current-self) is not significantly different from zero, r = 0.036, p = 0.672.

6.4.2.46 Volatility - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7163.981 7246.676 0.909 0.065 0.065
# parameters of interest
params_lcs_volat_ideal_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                           "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.946 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.585 NA NA
d_volat_1 ~1 0.221 -0.050 0.492 0.725 1.599 0.110
volat_t1 ~1 1.701 1.611 1.791 3.448 36.978 0.000
d_volat_1 ~~ d_volat_1 0.089 0.031 0.146 0.954 3.024 0.002
d_volat_1 ~ volat_t1 -0.132 -0.303 0.039 -0.214 -1.516 0.130
d_volat_1 ~~ sb06_01_t1 -0.043 -0.104 0.018 -0.143 -1.373 0.170
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.076 2.964 3.188 3.075 53.695 0.000

Correlation of general change goal with volatility change score (ideal-self) is not significantly different from zero, r = -0.143, p = 0.17.

6.4.2.47 Volatility - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8149.41 8232.106 0.962 0.066 0.093
# parameters of interest
params_lcs_volat_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.071 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.599 NA NA
d_volat_1 ~1 0.509 0.238 0.780 1.020 3.685 0.000
volat_t1 ~1 3.257 3.124 3.389 3.650 48.115 0.000
d_volat_1 ~~ d_volat_1 0.210 0.132 0.288 0.845 5.281 0.000
d_volat_1 ~ volat_t1 -0.220 -0.302 -0.138 -0.394 -5.275 0.000
d_volat_1 ~~ sb07_12_t1 -0.007 -0.114 0.100 -0.012 -0.128 0.898
sb07_12_t1 ~~ sb07_12_t1 1.697 1.505 1.889 1.000 17.292 0.000

Correlation of specific, facet-level change goals with volatility change score (current-self) is not significantly different from zero, r = -0.012, p = 0.898.

6.4.2.48 Volatility - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7326.795 7409.491 0.895 0.07 0.068
# parameters of interest
params_lcs_volat_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.939 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.574 NA NA
d_volat_1 ~1 0.201 -0.072 0.474 0.667 1.440 0.150
volat_t1 ~1 1.701 1.611 1.791 3.456 36.997 0.000
d_volat_1 ~~ d_volat_1 0.087 0.030 0.144 0.961 2.987 0.003
d_volat_1 ~ volat_t1 -0.120 -0.292 0.052 -0.196 -1.370 0.171
d_volat_1 ~~ sb07_12_t1 -0.022 -0.096 0.053 -0.056 -0.567 0.571
sb07_12_t1 ~~ sb07_12_t1 1.697 1.505 1.889 1.000 17.293 0.000

Correlation of specific, facet-level change goals with volatility change score (ideal-self) is not significantly different from zero, r = -0.056, p = 0.571.

6.4.2.49 Curiosity - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7756.127 7838.823 0.974 0.042 0.049
# parameters of interest
params_lcs_curio_curr_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                     "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.026 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.351 NA NA
d_curio_1 ~1 0.402 -0.082 0.885 2.407 1.628 0.103
curio_t1 ~1 4.065 3.968 4.162 8.337 82.261 0.000
d_curio_1 ~~ d_curio_1 0.026 -0.017 0.069 0.940 1.191 0.234
d_curio_1 ~ curio_t1 -0.084 -0.200 0.033 -0.245 -1.406 0.160
d_curio_1 ~~ sb06_01_t1 -0.007 -0.060 0.046 -0.043 -0.258 0.797
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.222 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.631 0.000

Correlation of general change goal with curiosity change score (current-self) is not significantly different from zero, r = -0.043, p = 0.797.

6.4.2.50 Curiosity - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7748.924 7831.62 0.971 0.036 0.052
# parameters of interest
params_lcs_curio_ideal_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                           "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.973 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.205 NA NA
d_curio_1 ~1 -0.037 -1.042 0.968 -0.488 -0.072 0.942
curio_t1 ~1 4.427 4.350 4.504 12.279 113.040 0.000
d_curio_1 ~~ d_curio_1 0.006 -0.035 0.046 0.999 0.279 0.780
d_curio_1 ~ curio_t1 0.006 -0.217 0.228 0.027 0.050 0.960
d_curio_1 ~~ sb06_01_t1 -0.010 -0.059 0.040 -0.129 -0.385 0.700
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.225 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.682 0.000

Correlation of general change goal with curiosity change score (ideal-self) is not significantly different from zero, r = -0.129, p = 0.7.

6.4.2.51 Curiosity - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7895.012 7977.708 0.953 0.057 0.067
# parameters of interest
params_lcs_curio_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.034 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.365 NA NA
d_curio_1 ~1 0.445 -0.072 0.963 2.614 1.687 0.092
curio_t1 ~1 4.065 3.968 4.162 8.431 82.329 0.000
d_curio_1 ~~ d_curio_1 0.027 -0.016 0.070 0.928 1.221 0.222
d_curio_1 ~ curio_t1 -0.095 -0.221 0.031 -0.268 -1.470 0.141
d_curio_1 ~~ sb07_13_t1 -0.023 -0.095 0.049 -0.112 -0.625 0.532
sb07_13_t1 ~~ sb07_13_t1 1.581 1.405 1.757 1.000 17.614 0.000

Correlation of specific, facet-level change goals with curiosity change score (current-self) is not significantly different from zero, r = -0.112, p = 0.532.

6.4.2.52 Curiosity - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7888.314 7971.01 0.992 0.019 0.04
# parameters of interest
params_lcs_curio_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.975 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.209 NA NA
d_curio_1 ~1 -0.027 -0.981 0.928 -0.342 -0.055 0.956
curio_t1 ~1 4.427 4.350 4.504 12.206 113.041 0.000
d_curio_1 ~~ d_curio_1 0.006 -0.035 0.047 1.000 0.293 0.769
d_curio_1 ~ curio_t1 0.003 -0.208 0.215 0.015 0.031 0.975
d_curio_1 ~~ sb07_13_t1 0.012 -0.053 0.078 0.126 0.369 0.712
sb07_13_t1 ~~ sb07_13_t1 1.581 1.405 1.757 1.000 17.620 0.000

Correlation of specific, facet-level change goals with curiosity change score (ideal-self) is not significantly different from zero, r = 0.126, p = 0.712.

6.4.2.53 Aesthetic - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7983.746 8066.442 0.993 0.026 0.037
# parameters of interest
params_lcs_aesth_curr_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                     "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.978 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.510 NA NA
d_aesth_1 ~1 0.341 0.022 0.661 13.207 2.092 0.036
aesth_t1 ~1 2.990 2.870 3.110 60.367 48.915 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.953 4.475 0.000
d_aesth_1 ~ aesth_t1 -0.113 -0.220 -0.007 -0.217 -2.088 0.037
d_aesth_1 ~~ sb06_01_t1 -0.001 -0.005 0.003 -0.039 -0.466 0.642
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.222 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.074 53.686 0.000

Correlation of general change goal with aesthetic change score (current-self) is not significantly different from zero, r = -0.039, p = 0.642.

6.4.2.54 Aesthetic - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7818.445 7901.141 1 0 0.044
# parameters of interest
params_lcs_aesth_ideal_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                           "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.932 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.561 NA NA
d_aesth_1 ~1 0.323 -0.116 0.761 3.789 1.443 0.149
aesth_t1 ~1 3.126 2.993 3.258 22.111 46.237 0.000
d_aesth_1 ~~ d_aesth_1 0.007 -0.006 0.020 0.969 1.042 0.297
d_aesth_1 ~ aesth_t1 -0.105 -0.244 0.033 -0.175 -1.495 0.135
d_aesth_1 ~~ sb06_01_t1 -0.008 -0.026 0.009 -0.100 -0.961 0.337
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.150 1.000 13.227 0.000
sb06_01_t1 ~1 3.075 2.963 3.187 3.073 53.653 0.000

Correlation of general change goal with aesthetic change score (ideal-self) is not significantly different from zero, r = -0.1, p = 0.337.

6.4.2.55 Aesthetic - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8169.366 8252.062 0.993 0.027 0.041
# parameters of interest
params_lcs_aesth_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.980 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.512 NA NA
d_aesth_1 ~1 0.349 0.034 0.663 12.295 2.175 0.030
aesth_t1 ~1 2.990 2.870 3.110 55.029 48.910 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.951 4.478 0.000
d_aesth_1 ~ aesth_t1 -0.116 -0.220 -0.011 -0.222 -2.170 0.030
d_aesth_1 ~~ sb07_14_t1 0.006 0.000 0.012 0.164 1.953 0.051
sb07_14_t1 ~~ sb07_14_t1 1.863 1.683 2.043 1.000 20.241 0.000

Correlation of specific, facet-level change goals with aesthetic change score (current-self) is not significantly different from zero, r = 0.164, p = 0.051.

6.4.2.56 Aesthetic - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 8004.787 8087.483 0.996 0.018 0.05
# parameters of interest
params_lcs_aesth_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.947 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.582 NA NA
d_aesth_1 ~1 0.403 -0.028 0.835 4.709 1.832 0.067
aesth_t1 ~1 3.126 2.993 3.258 22.398 46.239 0.000
d_aesth_1 ~~ d_aesth_1 0.007 -0.006 0.020 0.954 1.027 0.304
d_aesth_1 ~ aesth_t1 -0.131 -0.268 0.005 -0.214 -1.888 0.059
d_aesth_1 ~~ sb07_14_t1 0.020 -0.009 0.049 0.176 1.352 0.176
sb07_14_t1 ~~ sb07_14_t1 1.864 1.683 2.044 1.000 20.230 0.000

Correlation of specific, facet-level change goals with aesthetic change score (ideal-self) is not significantly different from zero, r = 0.176, p = 0.176.

6.4.2.57 Imagination - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7571.494 7654.189 0.975 0.048 0.054
# parameters of interest
params_lcs_imagi_curr_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                     "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.989 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.496 NA NA
d_imagi_1 ~1 0.492 0.053 0.931 1.256 2.195 0.028
imagi_t1 ~1 3.550 3.441 3.659 4.546 63.926 0.000
d_imagi_1 ~~ d_imagi_1 0.145 0.062 0.228 0.948 3.429 0.001
d_imagi_1 ~ imagi_t1 -0.115 -0.234 0.004 -0.229 -1.888 0.059
d_imagi_1 ~~ sb06_01_t1 0.009 -0.057 0.076 0.025 0.280 0.780
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.223 0.000
sb06_01_t1 ~1 3.076 2.963 3.188 3.074 53.670 0.000

Correlation of general change goal with imagination change score (current-self) is not significantly different from zero, r = 0.025, p = 0.78.

6.4.2.58 Imagination - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7036.507 7119.202 0.911 0.063 0.063
# parameters of interest
params_lcs_imagi_ideal_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                           "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.987 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.875 NA NA
d_imagi_1 ~1 1.740 0.500 2.980 4.061 2.751 0.006
imagi_t1 ~1 4.571 4.502 4.640 9.462 130.008 0.000
d_imagi_1 ~~ d_imagi_1 0.150 0.073 0.226 0.817 3.837 0.000
d_imagi_1 ~ imagi_t1 -0.380 -0.645 -0.115 -0.428 -2.807 0.005
d_imagi_1 ~~ sb06_01_t1 0.013 -0.050 0.077 0.035 0.414 0.679
sb06_01_t1 ~~ sb06_01_t1 1.001 0.853 1.149 1.000 13.222 0.000
sb06_01_t1 ~1 3.075 2.963 3.188 3.074 53.689 0.000

Correlation of general change goal with imagination change score (ideal-self) is not significantly different from zero, r = 0.035, p = 0.679.

6.4.2.59 Imagination - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7772.139 7854.835 0.952 0.068 0.08
# parameters of interest
params_lcs_imagi_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.984 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.490 NA NA
d_imagi_1 ~1 0.468 0.031 0.905 1.201 2.097 0.036
imagi_t1 ~1 3.550 3.441 3.659 4.543 63.898 0.000
d_imagi_1 ~~ d_imagi_1 0.144 0.061 0.228 0.953 3.403 0.001
d_imagi_1 ~ imagi_t1 -0.108 -0.226 0.011 -0.216 -1.785 0.074
d_imagi_1 ~~ sb07_15_t1 0.040 -0.054 0.135 0.076 0.834 0.404
sb07_15_t1 ~~ sb07_15_t1 1.959 1.770 2.147 1.000 20.365 0.000

Correlation of specific, facet-level change goals with imagination change score (current-self) is not significantly different from zero, r = 0.076, p = 0.404.

6.4.2.60 Imagination - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 22 7237.889 7320.585 0.907 0.064 0.064
# parameters of interest
params_lcs_imagi_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.984 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.868 NA NA
d_imagi_1 ~1 1.709 0.465 2.953 4.012 2.692 0.007
imagi_t1 ~1 4.571 4.502 4.640 9.469 130.136 0.000
d_imagi_1 ~~ d_imagi_1 0.149 0.074 0.225 0.821 3.868 0.000
d_imagi_1 ~ imagi_t1 -0.373 -0.639 -0.107 -0.423 -2.745 0.006
d_imagi_1 ~~ sb07_15_t1 -0.013 -0.098 0.071 -0.025 -0.309 0.757
sb07_15_t1 ~~ sb07_15_t1 1.959 1.770 2.147 1.000 20.366 0.000

Correlation of specific, facet-level change goals with imagination change score (ideal-self) is not significantly different from zero, r = -0.025, p = 0.757.

6.4.3 Hyp 4: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp4 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.052 0.163 2.006 0.045
extraversion ideal general 0.035 0.135 1.673 0.094
extraversion current specific 0.008 0.044 0.374 0.708
extraversion ideal specific 0.014 0.096 0.630 0.528
agreeableness current general -0.018 -0.087 -1.006 0.314
agreeableness ideal general -0.002 -0.009 -0.098 0.922
agreeableness current specific 0.001 0.006 0.056 0.955
agreeableness ideal specific -0.035 -0.148 -1.459 0.145
conscientiousness current general 0.011 0.037 0.484 0.628
conscientiousness ideal general 0.011 0.040 0.447 0.655
conscientiousness current specific -0.003 -0.009 -0.093 0.926
conscientiousness ideal specific -0.016 -0.051 -0.603 0.546
neuroticism current general -0.045 -0.096 -1.407 0.159
neuroticism ideal general -0.027 -0.084 -1.033 0.302
neuroticism current specific 0.121 0.229 2.218 0.027
neuroticism ideal specific 0.001 0.003 0.043 0.966
openness current general -0.012 -0.061 -0.594 0.552
openness ideal general -0.028 -0.115 -1.154 0.249
openness current specific 0.029 0.247 2.221 0.026
openness ideal specific 0.015 0.097 0.993 0.321

Three covariances/correlations that significantly differ from zero:
- Changes in current-level extraversion covary with the general change goal.
- Changes in current-level neuroticism covary with the specific trait goals (latent factor of the three N facets).
- Changes in current-level openness covary with the specific trait goals (latent factor of the three O facets).

Results summary across the Big Five facets: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.081 0.162 1.983 0.047
sociability ideal general 0.042 0.187 1.540 0.124
sociability current specific -0.058 -0.097 -1.197 0.231
sociability ideal specific 0.062 0.228 1.959 0.050
assertiveness current general 0.010 0.049 0.328 0.743
assertiveness ideal general 0.037 0.201 1.876 0.061
assertiveness current specific 0.014 0.060 0.440 0.660
assertiveness ideal specific 0.018 0.082 0.807 0.420
energy current general -0.018 -0.076 -0.808 0.419
energy ideal general -0.031 -0.119 -1.136 0.256
energy current specific 0.031 0.103 1.212 0.226
energy ideal specific 0.031 0.098 0.932 0.351
compassion current general 0.018 0.102 0.697 0.486
compassion ideal general 0.015 0.040 0.351 0.725
compassion current specific -0.025 -0.103 -0.581 0.561
compassion ideal specific -0.042 -0.083 -0.725 0.468
respectfulness current general -0.040 -0.139 -1.500 0.134
respectfulness ideal general -0.006 -0.026 -0.273 0.785
respectfulness current specific 0.009 0.023 0.220 0.826
respectfulness ideal specific -0.057 -0.186 -1.974 0.048
trust current general -0.020 -0.063 -0.636 0.525
trust ideal general 0.002 0.011 0.115 0.908
trust current specific -0.013 -0.032 -0.314 0.753
trust ideal specific 0.016 0.054 0.515 0.607
organization current general -0.067 -0.141 -1.580 0.114
organization ideal general -0.023 -0.073 -0.751 0.452
organization current specific 0.077 0.110 1.076 0.282
organization ideal specific 0.048 0.103 1.133 0.257
productiveness current general 0.004 0.012 0.139 0.890
productiveness ideal general 0.004 0.014 0.142 0.887
productiveness current specific 0.026 0.060 0.611 0.542
productiveness ideal specific 0.016 0.042 0.498 0.618
responsibility current general -0.036 -0.179 -1.647 0.100
responsibility ideal general 0.003 0.010 0.095 0.925
responsibility current specific -0.047 -0.155 -1.359 0.174
responsibility ideal specific -0.005 -0.012 -0.113 0.910
anxiety current general 0.057 0.109 1.412 0.158
anxiety ideal general 0.010 0.069 0.629 0.530
anxiety current specific -0.218 -0.267 -2.707 0.007
anxiety ideal specific 0.021 0.090 0.930 0.353
depression current general 0.021 0.058 0.794 0.427
depression ideal general 0.035 0.117 1.281 0.200
depression current specific -0.172 -0.281 -2.591 0.010
depression ideal specific -0.054 -0.115 -1.492 0.136
volatility current general 0.017 0.036 0.423 0.672
volatility ideal general -0.043 -0.143 -1.373 0.170
volatility current specific -0.007 -0.012 -0.128 0.898
volatility ideal specific -0.022 -0.056 -0.567 0.571
curiosity current general -0.007 -0.043 -0.258 0.797
curiosity ideal general -0.010 -0.129 -0.385 0.700
curiosity current specific -0.023 -0.112 -0.625 0.532
curiosity ideal specific 0.012 0.126 0.369 0.712
aesthetic current general -0.001 -0.039 -0.466 0.642
aesthetic ideal general -0.008 -0.100 -0.961 0.337
aesthetic current specific 0.006 0.164 1.953 0.051
aesthetic ideal specific 0.020 0.176 1.352 0.176
imagination current general 0.009 0.025 0.280 0.780
imagination ideal general 0.013 0.035 0.414 0.679
imagination current specific 0.040 0.076 0.834 0.404
imagination ideal specific -0.013 -0.025 -0.309 0.757

Looking at the facets, we see five covariances that significantly differ from zero:
- For sociability, changes in current-level covary with the general change goal and changes in ideal-level with the specific facet change goal (both effects barely significant).
- Matching the effects from neuroticism above, we find that changes in current-level anxiety and depression covary with the respective specific facet change goal.
- Further, changes in ideal-level respectfulness covary with the specific facet change goal (small effect that is barely significant; in the right direction, though -> minus sign is because a reverse-keyed item was used as reference indicator).

Prepare data frame for plotting:

Show the code
df_table_hyp4_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp4_plot <- df_table_hyp4_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general change goal
  • specific = specific, facet-level change goal(s)
Show the code
ggplot(df_table_hyp4_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.5 H5: Acceptance goals and change in personality (current / ideal) in self-acceptance group

In the self-acceptance group, there will be a correlation between acceptance goals and change in ideal-self ratings but not change in current-self ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# colnames(df_sbsa_wide_pers_sa)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa)

6.5.1 Big Five traits

6.5.1.1 Extraversion - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~ extra_t1       # This estimates the self-feedback parameter

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp5 <- lavaan(mi_lcs_extra_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 4089.128 4155.916 0.989 0.051 0.042
# parameters of interest
params_lcs_extra_curr_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                     "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.034 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.563 NA NA
d_extra_1 ~1 0.650 0.404 0.895 1.737 5.190 0.000
extra_t1 ~1 2.762 2.674 2.850 4.023 61.719 0.000
d_extra_1 ~~ d_extra_1 0.125 0.074 0.175 0.890 4.821 0.000
d_extra_1 ~ extra_t1 -0.181 -0.267 -0.094 -0.332 -4.096 0.000
d_extra_1 ~~ sa06_01_t1 0.047 0.006 0.088 0.140 2.273 0.023
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.191 4.082 4.299 4.402 75.693 0.000

The correlation of general acceptance goal with the extraversion change score (current-self) is significantly different from zero, r = 0.14, p = 0.023.

6.5.1.2 Extraversion - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~ extra_t1       # This estimates the self-feedback parameter

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp5 <- lavaan(mi_lcs_extra_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 3504.32 3571.108 0.992 0.029 0.039
# parameters of interest
params_lcs_extra_ideal_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.052 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.790 NA NA
d_extra_1 ~1 1.237 0.707 1.767 4.674 4.573 0.000
extra_t1 ~1 3.843 3.777 3.909 10.901 113.832 0.000
d_extra_1 ~~ d_extra_1 0.057 0.027 0.086 0.807 3.724 0.000
d_extra_1 ~ extra_t1 -0.330 -0.467 -0.192 -0.439 -4.709 0.000
d_extra_1 ~~ sa06_01_t1 0.018 -0.013 0.050 0.081 1.133 0.257
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.082 4.299 4.402 75.694 0.000

Correlation of general acceptance goal with extraversion change score (ideal-self) is not significantly different from zero, r = 0.081, p = 0.257.

6.5.1.3 Extraversion - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~ extra_t1       # This estimates the self-feedback parameter

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp5 <- lavaan(mi_lcs_extra_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 6292.257 6385.017 0.899 0.127 0.194
# parameters of interest
params_lcs_extra_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.024 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.552 NA NA
d_extra_1 ~1 0.616 0.343 0.890 1.665 4.419 0.000
extra_t1 ~1 2.762 2.675 2.850 4.027 61.752 0.000
d_extra_1 ~~ d_extra_1 0.124 0.073 0.174 0.902 4.825 0.000
d_extra_1 ~ extra_t1 -0.169 -0.267 -0.070 -0.312 -3.368 0.001
goals ~~ d_extra_1 0.024 -0.040 0.089 0.082 0.739 0.460
goals ~~ goals 0.717 0.329 1.105 1.000 3.621 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (current-self) is not significantly different from zero, r = 0.082, p = 0.46.

6.5.1.4 Extraversion - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~ extra_t1       # This estimates the self-feedback parameter

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp5 <- lavaan(mi_lcs_extra_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 5702.262 5795.023 0.955 0.057 0.049
# parameters of interest
params_lcs_extra_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.048 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.784 NA NA
d_extra_1 ~1 1.217 0.691 1.743 4.679 4.538 0.000
extra_t1 ~1 3.843 3.777 3.909 11.053 114.075 0.000
d_extra_1 ~~ d_extra_1 0.055 0.026 0.084 0.812 3.679 0.000
d_extra_1 ~ extra_t1 -0.324 -0.460 -0.189 -0.434 -4.677 0.000
goals ~~ d_extra_1 -0.035 -0.079 0.009 -0.179 -1.543 0.123
goals ~~ goals 0.696 0.319 1.073 1.000 3.617 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (ideal-self) is not significantly different from zero, r = -0.179, p = 0.123.

6.5.1.5 Agreeableness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~ agree_t1       # This estimates the self-feedback parameter

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp5 <- lavaan(mi_lcs_agree_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 3547.09 3613.878 0.979 0.055 0.065
# parameters of interest
params_lcs_agree_curr_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                     "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.039 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.565 NA NA
d_agree_1 ~1 0.644 -0.018 1.307 3.041 1.905 0.057
agree_t1 ~1 3.336 3.268 3.403 8.557 96.584 0.000
d_agree_1 ~~ d_agree_1 0.040 0.007 0.072 0.885 2.406 0.016
d_agree_1 ~ agree_t1 -0.184 -0.379 0.010 -0.339 -1.858 0.063
d_agree_1 ~~ sa06_01_t1 0.029 -0.008 0.065 0.150 1.548 0.122
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.611 0.000

Correlation of general acceptance goal with agreeableness change score (current-self) is not significantly different from zero, r = 0.15, p = 0.122.

6.5.1.6 Agreeableness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~ agree_t1       # This estimates the self-feedback parameter

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp5 <- lavaan(mi_lcs_agree_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 3711.06 3777.848 0.986 0.044 0.069
# parameters of interest
params_lcs_agree_ideal_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.954 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.617 NA NA
d_agree_1 ~1 0.598 0.160 1.035 2.023 2.679 0.007
agree_t1 ~1 3.936 3.861 4.011 8.618 103.274 0.000
d_agree_1 ~~ d_agree_1 0.082 0.044 0.119 0.939 4.281 0.000
d_agree_1 ~ agree_t1 -0.160 -0.268 -0.052 -0.248 -2.905 0.004
d_agree_1 ~~ sa06_01_t1 0.001 -0.040 0.042 0.003 0.037 0.970
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.632 0.000

Correlation of general acceptance goal with agreeableness change score (ideal-self) is not significantly different from zero, r = 0.003, p = 0.97.

6.5.1.7 Agreeableness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~ agree_t1       # This estimates the self-feedback parameter

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp5 <- lavaan(mi_lcs_agree_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 5605.423 5698.184 0.966 0.06 0.083
# parameters of interest
params_lcs_agree_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.021 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.544 NA NA
d_agree_1 ~1 0.569 -0.052 1.190 2.729 1.796 0.072
agree_t1 ~1 3.336 3.268 3.403 8.519 96.513 0.000
d_agree_1 ~~ d_agree_1 0.039 0.007 0.072 0.908 2.377 0.017
d_agree_1 ~ agree_t1 -0.162 -0.344 0.020 -0.304 -1.740 0.082
goals ~~ d_agree_1 0.002 -0.031 0.034 0.011 0.105 0.916
goals ~~ goals 0.624 0.338 0.910 1.000 4.274 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (current-self) is not significantly different from zero, r = 0.011, p = 0.916.

6.5.1.8 Agreeableness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~ agree_t1       # This estimates the self-feedback parameter

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp5 <- lavaan(mi_lcs_agree_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 5765.942 5858.703 1 0 0.03
# parameters of interest
params_lcs_agree_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.954 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.617 NA NA
d_agree_1 ~1 0.596 0.181 1.011 2.020 2.814 0.005
agree_t1 ~1 3.936 3.861 4.011 8.625 103.268 0.000
d_agree_1 ~~ d_agree_1 0.082 0.044 0.119 0.939 4.293 0.000
d_agree_1 ~ agree_t1 -0.160 -0.262 -0.057 -0.247 -3.051 0.002
goals ~~ d_agree_1 -0.013 -0.059 0.033 -0.057 -0.548 0.583
goals ~~ goals 0.633 0.342 0.924 1.000 4.265 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.057, p = 0.583.

6.5.1.9 Conscientiousness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
d_consc_1 ~ consc_t1       # This estimates the self-feedback parameter

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp5 <- lavaan(mi_lcs_consc_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 3922.223 3989.01 1 0 0.022
# parameters of interest
params_lcs_consc_curr_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                     "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.031 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.448 NA NA
d_consc_1 ~1 0.535 0.282 0.787 1.595 4.151 0.000
consc_t1 ~1 3.195 3.097 3.292 4.139 64.256 0.000
d_consc_1 ~~ d_consc_1 0.103 0.059 0.148 0.918 4.532 0.000
d_consc_1 ~ consc_t1 -0.124 -0.198 -0.050 -0.286 -3.271 0.001
d_consc_1 ~~ sa06_01_t1 -0.003 -0.043 0.038 -0.008 -0.126 0.899
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.439 0.000

Correlation of general acceptance goal with conscientiousness change score (current-self) is not significantly different from zero, r = -0.008, p = 0.899.

6.5.1.10 Conscientiousness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
d_consc_1 ~ consc_t1       # This estimates the self-feedback parameter

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp5 <- lavaan(mi_lcs_consc_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 3097.49 3164.277 0.982 0.05 0.046
# parameters of interest
params_lcs_consc_ideal_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.976 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.740 NA NA
d_consc_1 ~1 1.171 0.427 1.916 3.799 3.083 0.002
consc_t1 ~1 4.392 4.335 4.449 10.795 151.675 0.000
d_consc_1 ~~ d_consc_1 0.084 0.053 0.114 0.880 5.387 0.000
d_consc_1 ~ consc_t1 -0.262 -0.427 -0.098 -0.346 -3.121 0.002
d_consc_1 ~~ sa06_01_t1 -0.022 -0.058 0.014 -0.080 -1.189 0.235
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.602 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.568 0.000

Correlation of general acceptance goal with conscientiousness change score (ideal-self) is not significantly different from zero, r = -0.08, p = 0.235.

6.5.1.11 Conscientiousness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
d_consc_1 ~ consc_t1       # This estimates the self-feedback parameter

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp5 <- lavaan(mi_lcs_consc_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 6024.823 6117.583 0.919 0.137 0.254
# parameters of interest
params_lcs_consc_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.101 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.522 NA NA
d_consc_1 ~1 0.777 0.454 1.101 2.121 4.708 0.000
consc_t1 ~1 3.195 3.097 3.292 4.135 64.279 0.000
d_consc_1 ~~ d_consc_1 0.110 0.062 0.158 0.822 4.507 0.000
d_consc_1 ~ consc_t1 -0.200 -0.298 -0.102 -0.421 -4.016 0.000
goals ~~ d_consc_1 -0.115 -0.201 -0.029 -0.300 -2.610 0.009
goals ~~ goals 1.328 1.002 1.653 1.000 7.998 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (current-self) is significantly different from zero, r = -0.3, p = 0.009.

6.5.1.12 Conscientiousness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
d_consc_1 ~ consc_t1       # This estimates the self-feedback parameter

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp5 <- lavaan(mi_lcs_consc_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 5207.504 5300.265 0.984 0.043 0.046
# parameters of interest
params_lcs_consc_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.985 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.754 NA NA
d_consc_1 ~1 1.237 0.511 1.963 3.953 3.339 0.001
consc_t1 ~1 4.392 4.335 4.449 10.743 151.518 0.000
d_consc_1 ~~ d_consc_1 0.085 0.054 0.116 0.869 5.382 0.000
d_consc_1 ~ consc_t1 -0.277 -0.438 -0.117 -0.362 -3.384 0.001
goals ~~ d_consc_1 -0.040 -0.093 0.013 -0.120 -1.485 0.137
goals ~~ goals 1.315 0.983 1.648 1.000 7.764 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (ideal-self) is significantly different from zero, r = -0.12, p = 0.137.

6.5.1.13 Neuroticism - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
d_neuro_1 ~ neuro_t1       # This estimates the self-feedback parameter

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp5 <- lavaan(mi_lcs_neuro_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 4357.621 4424.408 0.983 0.07 0.077
# parameters of interest
params_lcs_neuro_curr_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                     "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.990 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.538 NA NA
d_neuro_1 ~1 0.308 -0.019 0.634 0.712 1.845 0.065
neuro_t1 ~1 3.521 3.420 3.621 4.430 68.676 0.000
d_neuro_1 ~~ d_neuro_1 0.175 0.118 0.231 0.936 6.051 0.000
d_neuro_1 ~ neuro_t1 -0.137 -0.228 -0.047 -0.252 -2.978 0.003
d_neuro_1 ~~ sa06_01_t1 -0.052 -0.111 0.007 -0.131 -1.725 0.085
sa06_01_t1 ~~ sa06_01_t1 0.907 0.722 1.092 1.000 9.590 0.000
sa06_01_t1 ~1 4.192 4.083 4.300 4.401 75.809 0.000

Correlation of general acceptance goal with neuroticism change score (current-self) is not significantly different from zero, r = -0.131, p = 0.085.

6.5.1.14 Neuroticism - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
d_neuro_1 ~ neuro_t1       # This estimates the self-feedback parameter

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp5 <- lavaan(mi_lcs_neuro_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 3389.72 3456.507 0.992 0.03 0.039
# parameters of interest
params_lcs_neuro_ideal_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.900 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.775 NA NA
d_neuro_1 ~1 0.434 0.154 0.714 1.343 3.037 0.002
neuro_t1 ~1 1.658 1.602 1.714 4.416 58.314 0.000
d_neuro_1 ~~ d_neuro_1 0.095 0.057 0.134 0.913 4.818 0.000
d_neuro_1 ~ neuro_t1 -0.253 -0.429 -0.078 -0.294 -2.829 0.005
d_neuro_1 ~~ sa06_01_t1 -0.017 -0.060 0.025 -0.060 -0.802 0.422
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.555 0.000

Correlation of general acceptance goal with neuroticism change score (ideal-self) is not significantly different from zero, r = -0.06, p = 0.422.

6.5.1.15 Neuroticism - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
d_neuro_1 ~ neuro_t1       # This estimates the self-feedback parameter

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp5 <- lavaan(mi_lcs_neuro_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 6501.688 6594.449 0.948 0.1 0.153
# parameters of interest
params_lcs_neuro_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.020 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.569 NA NA
d_neuro_1 ~1 0.441 0.083 0.799 0.993 2.415 0.016
neuro_t1 ~1 3.521 3.420 3.621 4.422 68.663 0.000
d_neuro_1 ~~ d_neuro_1 0.178 0.120 0.235 0.901 6.045 0.000
d_neuro_1 ~ neuro_t1 -0.175 -0.276 -0.074 -0.314 -3.405 0.001
goals ~~ d_neuro_1 0.035 -0.031 0.101 0.097 1.042 0.297
goals ~~ goals 0.743 0.349 1.138 1.000 3.695 0.000

Correlation of specific, facet-level acceptance goals with neuroticism change score (current-self) is significantly different from zero, r = 0.097, p = 0.297.

6.5.1.16 Neuroticism - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
d_neuro_1 ~ neuro_t1       # This estimates the self-feedback parameter

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp5 <- lavaan(mi_lcs_neuro_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 5527.485 5620.245 0.965 0.054 0.049
# parameters of interest
params_lcs_neuro_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.896 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.769 NA NA
d_neuro_1 ~1 0.423 0.149 0.696 1.297 3.025 0.002
neuro_t1 ~1 1.658 1.602 1.713 4.370 58.300 0.000
d_neuro_1 ~~ d_neuro_1 0.097 0.057 0.138 0.918 4.750 0.000
d_neuro_1 ~ neuro_t1 -0.246 -0.417 -0.074 -0.286 -2.811 0.005
goals ~~ d_neuro_1 0.045 0.011 0.079 0.183 2.622 0.009
goals ~~ goals 0.631 0.147 1.115 1.000 2.553 0.011

The correlation of specific, facet-level acceptance goals with the neuroticism change score (ideal-self) is significantly different from zero, r = 0.183, p = 0.009.

6.5.1.17 Openness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
d_openn_1 ~ openn_t1       # This estimates the self-feedback parameter

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp5 <- lavaan(mi_lcs_openn_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 18 3748.529 3815.317 1 0 0.036
# parameters of interest
params_lcs_openn_curr_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                     "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.037 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.557 NA NA
d_openn_1 ~1 0.702 0.337 1.066 2.408 3.768 0.000
openn_t1 ~1 3.578 3.502 3.654 6.602 92.688 0.000
d_openn_1 ~~ d_openn_1 0.075 0.047 0.104 0.889 5.121 0.000
d_openn_1 ~ openn_t1 -0.179 -0.278 -0.080 -0.333 -3.558 0.000
d_openn_1 ~~ sa06_01_t1 0.003 -0.035 0.042 0.013 0.174 0.862
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.598 0.000

Correlation of general acceptance goal with openness change score (current-self) is not significantly different from zero, r = 0.013, p = 0.862.

6.5.1.18 Openness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
d_openn_1 ~ openn_t1       # This estimates the self-feedback parameter

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp5 <- lavaan(mi_lcs_openn_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='WLSMV', fixed.x=FALSE, ordered="sa06_01_t1")
# This model did not converge properly (when adding the 'sa06_01_t1' goal variable). Declaring 'sa06_01_t1' as an 
# ordered variable and using the WLSMV estimator (sadly without FIML) worked in the end. Results 
# https://lavaan.ugent.be/tutorial/cat.html
summary(fit_mi_lcs_openn_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 18 NA NA 0.996 0.022 0.053
# parameters of interest
params_lcs_openn_ideal_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.953 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.675 NA NA
d_openn_1 ~1 0.748 0.271 1.225 2.690 3.075 0.002
openn_t1 ~1 3.896 3.827 3.966 9.921 109.850 0.000
d_openn_1 ~~ d_openn_1 0.071 0.042 0.100 0.920 4.777 0.000
d_openn_1 ~ openn_t1 -0.200 -0.325 -0.075 -0.283 -3.146 0.002
d_openn_1 ~~ sa06_01_t1 0.050 -0.004 0.104 0.187 1.799 0.072
sa06_01_t1 ~~ sa06_01_t1 1.000 -0.960 2.960 1.000 1.000 0.317
sa06_01_t1 ~1 0.000 -0.132 0.132 0.000 0.000 1.000

Correlation of general acceptance goal with openness change score (ideal-self) is not significantly different from zero, r = 0.187, p = 0.072.

6.5.1.19 Openness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
d_openn_1 ~ openn_t1       # This estimates the self-feedback parameter

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp5 <- lavaan(mi_lcs_openn_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')

summary(fit_mi_lcs_openn_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 25 5716.504 5809.264 0.962 0.078 0.152
# parameters of interest
params_lcs_openn_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.061 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.587 NA NA
d_openn_1 ~1 0.808 0.431 1.185 2.702 4.201 0.000
openn_t1 ~1 3.578 3.503 3.654 6.623 92.709 0.000
d_openn_1 ~~ d_openn_1 0.077 0.048 0.106 0.857 5.175 0.000
d_openn_1 ~ openn_t1 -0.209 -0.311 -0.107 -0.378 -4.000 0.000
goals ~~ d_openn_1 -0.030 -0.065 0.005 -0.151 -1.683 0.092
goals ~~ goals 0.514 0.285 0.743 1.000 4.399 0.000

Correlation of specific, facet-level acceptance goals with openness change score (current-self) is not significantly different from zero, r = -0.151, p = 0.092.

6.5.1.20 Openness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
d_openn_1 ~ openn_t1       # This estimates the self-feedback parameter

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp5 <- lavaan(mi_lcs_openn_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='WLSMV', fixed.x=FALSE, ordered=c("sa07_13_t1", "sa07_14_t1", "sa07_15_t1"))
# This model did not converge properly (when adding the 'sa06_01_t1' goal variable). 
# Declaring c("sa07_13_t1", "sa07_14_t1", "sa07_15_t1") as  
# ordered variables and using the WLSMV estimator (sadly without FIML) worked in the end. Results 
# https://lavaan.ugent.be/tutorial/cat.html
summary(fit_mi_lcs_openn_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 25 NA NA 0.999 0.011 0.052
# parameters of interest
params_lcs_openn_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.954 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.675 NA NA
d_openn_1 ~1 0.750 0.274 1.227 2.703 3.085 0.002
openn_t1 ~1 3.896 3.827 3.966 9.938 109.881 0.000
d_openn_1 ~~ d_openn_1 0.071 0.042 0.100 0.920 4.789 0.000
d_openn_1 ~ openn_t1 -0.201 -0.326 -0.076 -0.284 -3.156 0.002
goals ~~ d_openn_1 -0.036 -0.070 -0.002 -0.220 -2.098 0.036
goals ~~ goals 0.384 0.284 0.483 1.000 7.548 0.000

The correlation of specific, facet-level acceptance goals with the openness change score (ideal-self) is significantly different from zero, r = -0.22, p = 0.036.

6.5.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
d_facet_1 ~ facet_t1       # This estimates the self-feedback parameter

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with acceptance goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sa06_01_t1 & sa07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sa06_01_t1"
      } else{
        goal_op = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), facet_model_fit))
      }
    }
  }
}  
6.5.2.1 Sociability - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7231.696 7313.325 0.971 0.064 0.049
# parameters of interest
params_lcs_socia_curr_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                     "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.042 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.450 NA NA
d_socia_1 ~1 0.536 0.320 0.753 1.395 4.853 0.000
socia_t1 ~1 2.799 2.658 2.941 3.143 38.832 0.000
d_socia_1 ~~ d_socia_1 0.134 0.063 0.204 0.905 3.718 0.000
d_socia_1 ~ socia_t1 -0.133 -0.210 -0.056 -0.308 -3.388 0.001
d_socia_1 ~~ sa06_01_t1 0.062 0.008 0.115 0.177 2.239 0.025
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.188 4.079 4.297 4.399 75.378 0.000

The correlation of the general acceptance goal with the sociability change score (current-self) is significantly different from zero, r = 0.177, p = 0.025.

6.5.2.2 Sociability - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7191.725 7273.355 0.947 0.052 0.054
# parameters of interest
params_lcs_socia_ideal_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                           "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.001 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.701 NA NA
d_socia_1 ~1 1.019 0.203 1.835 3.952 2.447 0.014
socia_t1 ~1 4.317 4.241 4.394 11.726 110.171 0.000
d_socia_1 ~~ d_socia_1 0.058 0.008 0.108 0.877 2.289 0.022
d_socia_1 ~ socia_t1 -0.246 -0.432 -0.060 -0.351 -2.592 0.010
d_socia_1 ~~ sa06_01_t1 -0.005 -0.042 0.033 -0.020 -0.239 0.811
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.589 0.000

Correlation of general acceptance goal with sociability change score (ideal-self) is not significantly different from zero, r = -0.02, p = 0.811.

6.5.2.3 Sociability - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7448.839 7530.468 0.918 0.11 0.144
# parameters of interest
params_lcs_socia_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.053 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.461 NA NA
d_socia_1 ~1 0.569 0.329 0.810 1.466 4.643 0.000
socia_t1 ~1 2.800 2.659 2.941 3.154 38.868 0.000
d_socia_1 ~~ d_socia_1 0.134 0.065 0.204 0.890 3.795 0.000
d_socia_1 ~ socia_t1 -0.145 -0.231 -0.059 -0.332 -3.300 0.001
d_socia_1 ~~ sa07_01_t1 -0.012 -0.103 0.079 -0.024 -0.257 0.797
sa07_01_t1 ~~ sa07_01_t1 1.866 1.657 2.075 1.000 17.474 0.000

Correlation of specific, facet-level acceptance goals with sociability change score (current-self) is not significantly different from zero, r = -0.024, p = 0.797.

6.5.2.4 Sociability - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7403.017 7484.647 0.923 0.063 0.06
# parameters of interest
params_lcs_socia_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.991 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.679 NA NA
d_socia_1 ~1 0.929 0.091 1.768 3.549 2.172 0.030
socia_t1 ~1 4.318 4.241 4.395 11.292 109.553 0.000
d_socia_1 ~~ d_socia_1 0.061 0.007 0.115 0.892 2.221 0.026
d_socia_1 ~ socia_t1 -0.225 -0.417 -0.034 -0.329 -2.310 0.021
d_socia_1 ~~ sa07_01_t1 -0.045 -0.134 0.044 -0.133 -0.986 0.324
sa07_01_t1 ~~ sa07_01_t1 1.866 1.657 2.075 1.000 17.474 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-self) is not significantly different from zero, r = -0.133, p = 0.324.

6.5.2.5 Assertiveness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7567.584 7649.213 0.983 0.04 0.044
# parameters of interest
params_lcs_asser_curr_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                     "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.982 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.535 NA NA
d_asser_1 ~1 0.494 0.198 0.791 1.483 3.266 0.001
asser_t1 ~1 3.103 2.985 3.220 5.068 51.703 0.000
d_asser_1 ~~ d_asser_1 0.105 0.050 0.159 0.943 3.775 0.000
d_asser_1 ~ asser_t1 -0.130 -0.222 -0.038 -0.239 -2.764 0.006
d_asser_1 ~~ sa06_01_t1 0.044 -0.006 0.094 0.144 1.738 0.082
sa06_01_t1 ~~ sa06_01_t1 0.907 0.722 1.092 1.000 9.596 0.000
sa06_01_t1 ~1 4.192 4.084 4.301 4.403 75.795 0.000

Correlation of general acceptance goal with assertiveness change score (current-self) is not significantly different from zero, r = 0.144, p = 0.082.

6.5.2.6 Assertiveness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7403.665 7485.294 0.98 0.03 0.043
# parameters of interest
params_lcs_asser_ideal_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                           "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.016 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.726 NA NA
d_asser_1 ~1 1.096 0.332 1.861 5.567 2.812 0.005
asser_t1 ~1 4.148 4.052 4.244 15.047 84.520 0.000
d_asser_1 ~~ d_asser_1 0.033 0.003 0.064 0.856 2.143 0.032
d_asser_1 ~ asser_t1 -0.271 -0.453 -0.089 -0.379 -2.917 0.004
d_asser_1 ~~ sa06_01_t1 0.017 -0.015 0.049 0.100 1.059 0.290
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.602 0.000
sa06_01_t1 ~1 4.190 4.082 4.299 4.401 75.670 0.000

Correlation of general acceptance goal with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.1, p = 0.29.

6.5.2.7 Assertiveness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7785.074 7866.704 0.931 0.083 0.1
# parameters of interest
params_lcs_asser_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.988 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.541 NA NA
d_asser_1 ~1 0.519 0.201 0.837 1.540 3.196 0.001
asser_t1 ~1 3.102 2.984 3.220 5.036 51.680 0.000
d_asser_1 ~~ d_asser_1 0.106 0.051 0.162 0.937 3.773 0.000
d_asser_1 ~ asser_t1 -0.138 -0.237 -0.038 -0.252 -2.706 0.007
d_asser_1 ~~ sa07_02_t1 -0.004 -0.084 0.076 -0.010 -0.106 0.916
sa07_02_t1 ~~ sa07_02_t1 1.876 1.675 2.076 1.000 18.353 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (current-self) is not significantly different from zero, r = -0.01, p = 0.916.

6.5.2.8 Assertiveness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7618.606 7700.235 0.97 0.037 0.049
# parameters of interest
params_lcs_asser_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.009 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.715 NA NA
d_asser_1 ~1 1.051 0.280 1.822 5.347 2.673 0.008
asser_t1 ~1 4.148 4.052 4.244 14.943 84.560 0.000
d_asser_1 ~~ d_asser_1 0.033 0.003 0.064 0.865 2.158 0.031
d_asser_1 ~ asser_t1 -0.260 -0.443 -0.076 -0.367 -2.776 0.006
d_asser_1 ~~ sa07_02_t1 -0.021 -0.068 0.027 -0.082 -0.856 0.392
sa07_02_t1 ~~ sa07_02_t1 1.876 1.675 2.076 1.000 18.354 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (ideal-self) is not significantly different from zero, r = -0.082, p = 0.392.

6.5.2.9 Energy - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7685.109 7766.739 0.965 0.056 0.052
# parameters of interest
params_lcs_energ_curr_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                     "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.048 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.645 NA NA
d_energ_1 ~1 0.542 0.282 0.803 1.882 4.081 0.000
energ_t1 ~1 2.677 2.565 2.788 5.715 46.973 0.000
d_energ_1 ~~ d_energ_1 0.071 0.021 0.122 0.856 2.755 0.006
d_energ_1 ~ energ_t1 -0.234 -0.333 -0.134 -0.380 -4.600 0.000
d_energ_1 ~~ sa06_01_t1 -0.013 -0.049 0.024 -0.050 -0.684 0.494
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.585 0.000

Correlation of general acceptance goal with energy change score (current-self) is not significantly different from zero, r = -0.05, p = 0.494.

6.5.2.10 Energy - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6726.831 6808.461 0.964 0.033 0.049
# parameters of interest
params_lcs_energ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                           "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.094 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.753 NA NA
d_energ_1 ~1 0.765 0.316 1.214 6.889 3.338 0.001
energ_t1 ~1 2.395 2.274 2.517 14.860 38.650 0.000
d_energ_1 ~~ d_energ_1 0.010 -0.014 0.034 0.785 0.790 0.430
d_energ_1 ~ energ_t1 -0.319 -0.508 -0.131 -0.463 -3.317 0.001
d_energ_1 ~~ sa06_01_t1 -0.014 -0.039 0.012 -0.144 -1.038 0.299
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.191 4.082 4.299 4.402 75.676 0.000

Correlation of general acceptance goal with energy change score (ideal-self) is not significantly different from zero, r = -0.144, p = 0.299.

6.5.2.11 Energy - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7909.358 7990.988 0.882 0.108 0.13
# parameters of interest
params_lcs_energ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.081 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.690 NA NA
d_energ_1 ~1 0.656 0.355 0.958 2.199 4.264 0.000
energ_t1 ~1 2.677 2.565 2.788 5.726 47.016 0.000
d_energ_1 ~~ d_energ_1 0.072 0.022 0.123 0.813 2.813 0.005
d_energ_1 ~ energ_t1 -0.276 -0.391 -0.161 -0.432 -4.709 0.000
d_energ_1 ~~ sa07_03_t1 0.047 -0.022 0.116 0.125 1.344 0.179
sa07_03_t1 ~~ sa07_03_t1 1.949 1.744 2.154 1.000 18.642 0.000

Correlation of specific, facet-level acceptance goals with energy change score (current-self) is not significantly different from zero, r = 0.125, p = 0.179.

6.5.2.12 Energy - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6953.928 7035.558 0.95 0.039 0.051
# parameters of interest
params_lcs_energ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.086 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.741 NA NA
d_energ_1 ~1 0.740 0.282 1.197 6.818 3.168 0.002
energ_t1 ~1 2.395 2.274 2.516 15.055 38.653 0.000
d_energ_1 ~~ d_energ_1 0.009 -0.014 0.033 0.795 0.779 0.436
d_energ_1 ~ energ_t1 -0.309 -0.501 -0.116 -0.453 -3.147 0.002
d_energ_1 ~~ sa07_03_t1 0.013 -0.021 0.047 0.096 0.752 0.452
sa07_03_t1 ~~ sa07_03_t1 1.949 1.744 2.154 1.000 18.642 0.000

Correlation of specific, facet-level acceptance goals with energy change score (ideal-self) is not significantly different from zero, r = 0.096, p = 0.452.

6.5.2.13 Compassion - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7538.208 7619.837 0.932 0.067 0.068
# parameters of interest
params_lcs_compa_curr_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                     "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.128 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.734 NA NA
d_compa_1 ~1 1.382 0.639 2.124 2.795 3.646 0.000
compa_t1 ~1 4.135 4.025 4.244 5.441 74.196 0.000
d_compa_1 ~~ d_compa_1 0.186 0.065 0.306 0.760 3.017 0.003
d_compa_1 ~ compa_t1 -0.319 -0.488 -0.149 -0.490 -3.679 0.000
d_compa_1 ~~ sa06_01_t1 0.074 -0.011 0.160 0.181 1.704 0.088
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.189 4.080 4.298 4.400 75.546 0.000

Correlation of general acceptance goal with compassion change score (current-self) is not significantly different from zero, r = 0.181, p = 0.088.

6.5.2.14 Compassion - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7683.038 7764.668 0.972 0.033 0.057
# parameters of interest
params_lcs_compa_ideal_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                           "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.947 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.581 NA NA
d_compa_1 ~1 0.488 -0.485 1.460 1.336 0.983 0.326
compa_t1 ~1 4.293 4.199 4.387 7.216 89.548 0.000
d_compa_1 ~~ d_compa_1 0.127 0.005 0.250 0.955 2.032 0.042
d_compa_1 ~ compa_t1 -0.131 -0.351 0.090 -0.213 -1.162 0.245
d_compa_1 ~~ sa06_01_t1 0.026 -0.045 0.096 0.075 0.709 0.478
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.594 0.000

Correlation of general acceptance goal with compassion change score (ideal-self) is not significantly different from zero, r = 0.075, p = 0.478.

6.5.2.15 Compassion - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7732.912 7814.542 0.923 0.071 0.077
# parameters of interest
params_lcs_compa_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.098 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.687 NA NA
d_compa_1 ~1 1.223 0.497 1.949 2.651 3.302 0.001
compa_t1 ~1 4.137 4.029 4.245 5.614 75.061 0.000
d_compa_1 ~~ d_compa_1 0.170 0.062 0.277 0.798 3.095 0.002
d_compa_1 ~ compa_t1 -0.281 -0.448 -0.115 -0.449 -3.309 0.001
d_compa_1 ~~ sa07_04_t1 0.019 -0.073 0.112 0.035 0.406 0.685
sa07_04_t1 ~~ sa07_04_t1 1.729 1.536 1.923 1.000 17.558 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (current-self) is not significantly different from zero, r = 0.035, p = 0.685.

6.5.2.16 Compassion - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7872.214 7953.843 1 0 0.033
# parameters of interest
params_lcs_compa_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.941 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.570 NA NA
d_compa_1 ~1 0.440 -0.504 1.384 1.231 0.913 0.361
compa_t1 ~1 4.292 4.198 4.386 7.273 89.501 0.000
d_compa_1 ~~ d_compa_1 0.123 0.001 0.244 0.961 1.984 0.047
d_compa_1 ~ compa_t1 -0.119 -0.333 0.095 -0.197 -1.092 0.275
d_compa_1 ~~ sa07_04_t1 -0.067 -0.167 0.032 -0.146 -1.334 0.182
sa07_04_t1 ~~ sa07_04_t1 1.729 1.536 1.923 1.000 17.557 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (ideal-self) is not significantly different from zero, r = -0.146, p = 0.182.

6.5.2.17 Respectfulness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6642.515 6724.145 0.962 0.055 0.054
# parameters of interest
params_lcs_respe_curr_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                     "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.993 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.535 NA NA
d_respe_1 ~1 0.640 -0.094 1.374 2.654 1.710 0.087
respe_t1 ~1 4.477 4.405 4.550 10.003 121.509 0.000
d_respe_1 ~~ d_respe_1 0.054 0.015 0.094 0.935 2.713 0.007
d_respe_1 ~ respe_t1 -0.138 -0.298 0.022 -0.256 -1.686 0.092
d_respe_1 ~~ sa06_01_t1 0.006 -0.037 0.049 0.027 0.270 0.787
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.581 0.000

Correlation of general acceptance goal with respectfulness change score (current-self) is not significantly different from zero, r = 0.027, p = 0.787.

6.5.2.18 Respectfulness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6138.589 6220.219 0.951 0.05 0.062
# parameters of interest
params_lcs_respe_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                           "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.868 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.559 NA NA
d_respe_1 ~1 0.191 -0.644 1.027 0.956 0.449 0.654
respe_t1 ~1 4.703 4.646 4.760 15.123 161.199 0.000
d_respe_1 ~~ d_respe_1 0.040 0.010 0.069 0.995 2.645 0.008
d_respe_1 ~ respe_t1 -0.044 -0.218 0.131 -0.068 -0.490 0.624
d_respe_1 ~~ sa06_01_t1 -0.010 -0.048 0.028 -0.052 -0.517 0.605
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.561 0.000

Correlation of general acceptance goal with respectfulness change score (ideal-self) is not significantly different from zero, r = -0.052, p = 0.605.

6.5.2.19 Respectfulness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6823.519 6905.148 0.928 0.077 0.093
# parameters of interest
params_lcs_respe_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.990 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.532 NA NA
d_respe_1 ~1 0.625 -0.126 1.376 2.599 1.630 0.103
respe_t1 ~1 4.477 4.405 4.550 10.000 121.477 0.000
d_respe_1 ~~ d_respe_1 0.054 0.015 0.093 0.937 2.724 0.006
d_respe_1 ~ respe_t1 -0.134 -0.299 0.030 -0.250 -1.603 0.109
d_respe_1 ~~ sa07_05_t1 0.003 -0.058 0.063 0.008 0.081 0.935
sa07_05_t1 ~~ sa07_05_t1 1.674 1.379 1.968 1.000 11.142 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (current-self) is not significantly different from zero, r = 0.008, p = 0.935.

6.5.2.20 Respectfulness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6318.586 6400.216 0.978 0.033 0.049
# parameters of interest
params_lcs_respe_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.875 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.571 NA NA
d_respe_1 ~1 0.269 -0.565 1.103 1.331 0.633 0.527
respe_t1 ~1 4.703 4.646 4.760 15.175 161.281 0.000
d_respe_1 ~~ d_respe_1 0.041 0.011 0.070 0.991 2.690 0.007
d_respe_1 ~ respe_t1 -0.060 -0.235 0.114 -0.092 -0.676 0.499
d_respe_1 ~~ sa07_05_t1 -0.028 -0.082 0.026 -0.107 -1.012 0.311
sa07_05_t1 ~~ sa07_05_t1 1.674 1.379 1.968 1.000 11.143 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (ideal-self) is not significantly different from zero, r = -0.107, p = 0.311.

6.5.2.21 Trust - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7684.064 7765.694 0.968 0.051 0.062
# parameters of interest
params_lcs_trust_curr_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                     "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.054 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.546 NA NA
d_trust_1 ~1 0.469 0.104 0.833 1.620 2.521 0.012
trust_t1 ~1 2.889 2.768 3.010 5.167 46.789 0.000
d_trust_1 ~~ d_trust_1 0.073 0.003 0.143 0.874 2.047 0.041
d_trust_1 ~ trust_t1 -0.184 -0.315 -0.052 -0.355 -2.742 0.006
d_trust_1 ~~ sa06_01_t1 0.001 -0.047 0.048 0.003 0.031 0.976
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.582 0.000

Correlation of general acceptance goal with trust change score (current-self) is not significantly different from zero, r = 0.003, p = 0.976.

6.5.2.22 Trust - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7419.656 7501.286 0.955 0.048 0.06
# parameters of interest
params_lcs_trust_ideal_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                           "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.996 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.678 NA NA
d_trust_1 ~1 0.468 0.152 0.784 1.675 2.905 0.004
trust_t1 ~1 1.907 1.808 2.006 4.650 37.866 0.000
d_trust_1 ~~ d_trust_1 0.069 0.021 0.118 0.888 2.804 0.005
d_trust_1 ~ trust_t1 -0.228 -0.391 -0.064 -0.334 -2.735 0.006
d_trust_1 ~~ sa06_01_t1 -0.030 -0.076 0.016 -0.120 -1.293 0.196
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.189 4.080 4.298 4.400 75.588 0.000

Correlation of general acceptance goal with trust change score (ideal-self) is not significantly different from zero, r = -0.12, p = 0.196.

6.5.2.23 Trust - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7912.466 7994.095 0.984 0.035 0.059
# parameters of interest
params_lcs_trust_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.065 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.562 NA NA
d_trust_1 ~1 0.512 0.159 0.865 1.740 2.841 0.004
trust_t1 ~1 2.889 2.768 3.010 5.183 46.790 0.000
d_trust_1 ~~ d_trust_1 0.074 0.005 0.143 0.858 2.115 0.034
d_trust_1 ~ trust_t1 -0.199 -0.325 -0.072 -0.376 -3.069 0.002
d_trust_1 ~~ sa07_06_t1 0.062 -0.003 0.128 0.162 1.858 0.063
sa07_06_t1 ~~ sa07_06_t1 1.987 1.779 2.195 1.000 18.703 0.000

Correlation of specific, facet-level acceptance goals with trust change score (current-self) is not significantly different from zero, r = 0.162, p = 0.063.

6.5.2.24 Trust - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7651.868 7733.497 0.98 0.031 0.044
# parameters of interest
params_lcs_trust_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.979 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.652 NA NA
d_trust_1 ~1 0.415 0.111 0.720 1.541 2.671 0.008
trust_t1 ~1 1.907 1.809 2.006 4.713 37.912 0.000
d_trust_1 ~~ d_trust_1 0.066 0.020 0.112 0.910 2.793 0.005
d_trust_1 ~ trust_t1 -0.200 -0.357 -0.043 -0.301 -2.497 0.013
d_trust_1 ~~ sa07_06_t1 0.034 -0.033 0.101 0.093 0.991 0.322
sa07_06_t1 ~~ sa07_06_t1 1.987 1.779 2.195 1.000 18.706 0.000

Correlation of specific, facet-level acceptance goals with trust change score (ideal-self) is not significantly different from zero, r = 0.093, p = 0.322.

6.5.2.25 Organization - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7320.975 7402.604 0.984 0.049 0.031
# parameters of interest
params_lcs_organ_curr_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                     "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.079 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.431 NA NA
d_organ_1 ~1 0.301 0.107 0.494 0.681 3.046 0.002
organ_t1 ~1 2.967 2.812 3.122 2.683 37.558 0.000
d_organ_1 ~~ d_organ_1 0.168 0.083 0.252 0.859 3.899 0.000
d_organ_1 ~ organ_t1 -0.150 -0.219 -0.081 -0.376 -4.245 0.000
d_organ_1 ~~ sa06_01_t1 0.019 -0.043 0.080 0.048 0.596 0.551
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.444 0.000

Correlation of general acceptance goal with organization change score (current-self) is not significantly different from zero, r = 0.048, p = 0.551.

6.5.2.26 Organization - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6263.329 6344.959 0.928 0.054 0.055
# parameters of interest
params_lcs_organ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                           "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.008 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.780 NA NA
d_organ_1 ~1 0.518 0.039 0.997 2.329 2.120 0.034
organ_t1 ~1 1.682 1.590 1.774 5.853 35.962 0.000
d_organ_1 ~~ d_organ_1 0.042 0.001 0.083 0.843 2.000 0.045
d_organ_1 ~ organ_t1 -0.307 -0.599 -0.016 -0.397 -2.064 0.039
d_organ_1 ~~ sa06_01_t1 0.021 -0.015 0.057 0.107 1.126 0.260
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.082 4.299 4.401 75.685 0.000

Correlation of general acceptance goal with organization change score (ideal-self) is not significantly different from zero, r = 0.107, p = 0.26.

6.5.2.27 Organization - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7595.791 7677.42 0.89 0.136 0.181
# parameters of interest
params_lcs_organ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.141 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.504 NA NA
d_organ_1 ~1 0.489 0.230 0.748 1.000 3.706 0.000
organ_t1 ~1 2.967 2.812 3.122 2.678 37.555 0.000
d_organ_1 ~~ d_organ_1 0.183 0.094 0.272 0.766 4.040 0.000
d_organ_1 ~ organ_t1 -0.214 -0.301 -0.126 -0.484 -4.770 0.000
d_organ_1 ~~ sa07_07_t1 0.167 0.031 0.303 0.255 2.410 0.016
sa07_07_t1 ~~ sa07_07_t1 2.345 2.152 2.537 1.000 23.859 0.000

The correlation of specific, facet-level acceptance goals with the organization change score (current-self) is significantly different from zero, r = 0.255, p = 0.016.

6.5.2.28 Organization - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6543.486 6625.115 0.927 0.054 0.056
# parameters of interest
params_lcs_organ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.023 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.813 NA NA
d_organ_1 ~1 0.570 0.108 1.031 2.484 2.418 0.016
organ_t1 ~1 1.682 1.590 1.774 5.826 35.965 0.000
d_organ_1 ~~ d_organ_1 0.043 0.001 0.085 0.819 1.999 0.046
d_organ_1 ~ organ_t1 -0.338 -0.619 -0.057 -0.425 -2.357 0.018
d_organ_1 ~~ sa07_07_t1 0.036 -0.025 0.097 0.114 1.159 0.246
sa07_07_t1 ~~ sa07_07_t1 2.345 2.152 2.538 1.000 23.855 0.000

Correlation of specific, facet-level acceptance goals with organization change score (ideal-self) is not significantly different from zero, r = 0.114, p = 0.246.

6.5.2.29 Productiveness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7394.18 7475.81 0.988 0.036 0.038
# parameters of interest
params_lcs_produ_curr_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                     "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.994 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.455 NA NA
d_produ_1 ~1 0.152 -0.189 0.494 0.412 0.875 0.382
produ_t1 ~1 3.481 3.346 3.616 4.313 50.517 0.000
d_produ_1 ~~ d_produ_1 0.130 0.057 0.203 0.953 3.482 0.000
d_produ_1 ~ produ_t1 -0.099 -0.195 -0.003 -0.217 -2.019 0.043
d_produ_1 ~~ sa06_01_t1 -0.013 -0.066 0.040 -0.039 -0.489 0.625
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.575 0.000

Correlation of general acceptance goal with productiveness change score (current-self) is not significantly different from zero, r = -0.039, p = 0.625.

6.5.2.30 Productiveness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 5863.013 5944.642 0.869 0.067 0.066
# parameters of interest
params_lcs_produ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                           "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.960 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.637 NA NA
d_produ_1 ~1 0.258 -0.147 0.664 1.236 1.249 0.212
produ_t1 ~1 1.592 1.514 1.670 5.053 40.151 0.000
d_produ_1 ~~ d_produ_1 0.041 0.005 0.076 0.929 2.252 0.024
d_produ_1 ~ produ_t1 -0.177 -0.447 0.093 -0.267 -1.286 0.199
d_produ_1 ~~ sa06_01_t1 -0.005 -0.041 0.030 -0.027 -0.288 0.774
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.518 0.000

Correlation of general acceptance goal with productiveness change score (ideal-self) is not significantly different from zero, r = -0.027, p = 0.774.

6.5.2.31 Productiveness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7642.167 7723.797 0.897 0.113 0.153
# parameters of interest
params_lcs_produ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.038 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.504 NA NA
d_produ_1 ~1 0.344 -0.091 0.779 0.881 1.552 0.121
produ_t1 ~1 3.480 3.345 3.615 4.328 50.545 0.000
d_produ_1 ~~ d_produ_1 0.137 0.061 0.214 0.900 3.510 0.000
d_produ_1 ~ produ_t1 -0.154 -0.277 -0.031 -0.317 -2.446 0.014
d_produ_1 ~~ sa07_08_t1 0.099 -0.023 0.221 0.183 1.595 0.111
sa07_08_t1 ~~ sa07_08_t1 2.121 1.919 2.323 1.000 20.589 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (current-self) is not significantly different from zero, r = 0.183, p = 0.111.

6.5.2.32 Productiveness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6113.862 6195.491 0.862 0.069 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.959 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.634 NA NA
d_produ_1 ~1 0.255 -0.149 0.660 1.225 1.238 0.216
produ_t1 ~1 1.592 1.514 1.670 5.053 40.150 0.000
d_produ_1 ~~ d_produ_1 0.040 0.005 0.076 0.930 2.225 0.026
d_produ_1 ~ produ_t1 -0.175 -0.444 0.094 -0.265 -1.277 0.202
d_produ_1 ~~ sa07_08_t1 -0.004 -0.059 0.051 -0.013 -0.135 0.892
sa07_08_t1 ~~ sa07_08_t1 2.121 1.919 2.323 1.000 20.590 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (ideal-self) is not significantly different from zero, r = -0.013, p = 0.892.

6.5.2.33 Responsibility - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7417.81 7499.44 0.906 0.088 0.084
# parameters of interest
params_lcs_respo_curr_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                     "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.039 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.406 NA NA
d_respo_1 ~1 0.518 0.067 0.968 2.054 2.252 0.024
respo_t1 ~1 3.641 3.530 3.751 5.652 64.676 0.000
d_respo_1 ~~ d_respo_1 0.058 0.007 0.109 0.917 2.238 0.025
d_respo_1 ~ respo_t1 -0.113 -0.235 0.009 -0.289 -1.821 0.069
d_respo_1 ~~ sa06_01_t1 0.012 -0.040 0.063 0.051 0.445 0.657
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.561 0.000

Correlation of general acceptance goal with responsibility change score (current-self) is not significantly different from zero, r = 0.051, p = 0.657.

6.5.2.34 Responsibility - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6742.385 6824.014 0.985 0.025 0.046
# parameters of interest
params_lcs_respo_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                           "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.981 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.722 NA NA
d_respo_1 ~1 1.102 0.338 1.867 3.050 2.826 0.005
respo_t1 ~1 4.272 4.163 4.380 8.692 76.845 0.000
d_respo_1 ~~ d_respo_1 0.115 0.042 0.189 0.883 3.073 0.002
d_respo_1 ~ respo_t1 -0.251 -0.426 -0.076 -0.342 -2.816 0.005
d_respo_1 ~~ sa06_01_t1 -0.009 -0.071 0.053 -0.027 -0.278 0.781
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.564 0.000

Correlation of general acceptance goal with responsibility change score (ideal-self) is not significantly different from zero, r = -0.027, p = 0.781.

6.5.2.35 Responsibility - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7652.303 7733.933 0.851 0.116 0.124
# parameters of interest
params_lcs_respo_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.120 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.519 NA NA
d_respo_1 ~1 0.864 0.138 1.590 2.970 2.331 0.020
respo_t1 ~1 3.641 3.531 3.752 5.798 64.563 0.000
d_respo_1 ~~ d_respo_1 0.067 0.012 0.123 0.798 2.368 0.018
d_respo_1 ~ respo_t1 -0.208 -0.416 -0.001 -0.450 -1.970 0.049
d_respo_1 ~~ sa07_09_t1 -0.178 -0.279 -0.076 -0.471 -3.430 0.001
sa07_09_t1 ~~ sa07_09_t1 2.112 1.904 2.320 1.000 19.874 0.000

The correlation of specific, facet-level acceptance goals with the responsibility change score (current-self) is significantly different from zero, r = -0.471, p = 0.001.

6.5.2.36 Responsibility - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6990.902 7072.531 0.995 0.015 0.041
# parameters of interest
params_lcs_respo_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.985 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.728 NA NA
d_respo_1 ~1 1.130 0.374 1.885 3.119 2.931 0.003
respo_t1 ~1 4.272 4.163 4.381 8.720 76.866 0.000
d_respo_1 ~~ d_respo_1 0.115 0.042 0.189 0.879 3.077 0.002
d_respo_1 ~ respo_t1 -0.258 -0.430 -0.085 -0.348 -2.922 0.003
d_respo_1 ~~ sa07_09_t1 -0.045 -0.135 0.045 -0.092 -0.983 0.326
sa07_09_t1 ~~ sa07_09_t1 2.111 1.903 2.318 1.000 19.927 0.000

Correlation of specific, facet-level acceptance goals with responsibility change score (ideal-self) is not significantly different from zero, r = -0.092, p = 0.326.

6.5.2.37 Anxiety - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7743.825 7825.454 0.978 0.043 0.058
# parameters of interest
params_lcs_anxie_curr_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                     "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.957 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.457 NA NA
d_anxie_1 ~1 0.362 0.082 0.643 0.844 2.532 0.011
anxie_t1 ~1 2.660 2.522 2.799 2.962 37.559 0.000
d_anxie_1 ~~ d_anxie_1 0.181 0.076 0.285 0.980 3.379 0.001
d_anxie_1 ~ anxie_t1 -0.068 -0.178 0.042 -0.142 -1.211 0.226
d_anxie_1 ~~ sa06_01_t1 0.026 -0.053 0.104 0.064 0.646 0.518
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.591 0.000

Correlation of general acceptance goal with anxiety change score (current-self) is not significantly different from zero, r = 0.064, p = 0.518.

6.5.2.38 Anxiety - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7370.866 7452.496 0.912 0.041 0.049
# parameters of interest
params_lcs_anxie_ideal_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                           "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.819 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.878 NA NA
d_anxie_1 ~1 1.468 -0.673 3.609 4.847 1.344 0.179
anxie_t1 ~1 4.583 4.517 4.648 16.215 137.681 0.000
d_anxie_1 ~~ d_anxie_1 0.083 -0.017 0.184 0.906 1.620 0.105
d_anxie_1 ~ anxie_t1 -0.329 -0.790 0.132 -0.307 -1.397 0.162
d_anxie_1 ~~ sa06_01_t1 0.019 -0.028 0.066 0.071 0.811 0.418
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.600 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.604 0.000

Correlation of general acceptance goal with anxiety change score (ideal-self) is not significantly different from zero, r = 0.071, p = 0.418.

6.5.2.39 Anxiety - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7991.586 8073.216 0.938 0.074 0.101
# parameters of interest
params_lcs_anxie_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.967 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.469 NA NA
d_anxie_1 ~1 0.402 0.105 0.699 0.924 2.652 0.008
anxie_t1 ~1 2.661 2.522 2.800 2.970 37.568 0.000
d_anxie_1 ~~ d_anxie_1 0.184 0.077 0.290 0.971 3.380 0.001
d_anxie_1 ~ anxie_t1 -0.083 -0.198 0.032 -0.171 -1.416 0.157
d_anxie_1 ~~ sa07_10_t1 -0.023 -0.154 0.108 -0.037 -0.348 0.728
sa07_10_t1 ~~ sa07_10_t1 2.097 1.899 2.295 1.000 20.800 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (current-self) is not significantly different from zero, r = -0.037, p = 0.728.

6.5.2.40 Anxiety - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7618.844 7700.474 0.879 0.049 0.05
# parameters of interest
params_lcs_anxie_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.813 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.873 NA NA
d_anxie_1 ~1 1.426 -0.748 3.601 4.625 1.286 0.198
anxie_t1 ~1 4.583 4.517 4.648 15.948 136.899 0.000
d_anxie_1 ~~ d_anxie_1 0.087 -0.019 0.192 0.911 1.611 0.107
d_anxie_1 ~ anxie_t1 -0.320 -0.788 0.148 -0.298 -1.339 0.181
d_anxie_1 ~~ sa07_10_t1 0.011 -0.100 0.121 0.025 0.187 0.852
sa07_10_t1 ~~ sa07_10_t1 2.097 1.900 2.295 1.000 20.800 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-self) is not significantly different from zero, r = 0.025, p = 0.852.

6.5.2.41 Depression - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7475.641 7557.27 0.961 0.074 0.066
# parameters of interest
params_lcs_depre_curr_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                     "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.013 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.522 NA NA
d_depre_1 ~1 0.623 0.370 0.876 1.567 4.825 0.000
depre_t1 ~1 2.896 2.761 3.030 3.760 42.277 0.000
d_depre_1 ~~ d_depre_1 0.145 0.077 0.214 0.920 4.148 0.000
d_depre_1 ~ depre_t1 -0.146 -0.229 -0.062 -0.282 -3.410 0.001
d_depre_1 ~~ sa06_01_t1 0.021 -0.035 0.077 0.058 0.744 0.457
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.092 1.000 9.596 0.000
sa06_01_t1 ~1 4.190 4.082 4.299 4.401 75.702 0.000

Correlation of general acceptance goal with depression change score (current-self) is not significantly different from zero, r = 0.058, p = 0.457.

6.5.2.42 Depression - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6024.435 6106.065 0.894 0.066 0.066
# parameters of interest
params_lcs_depre_ideal_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                           "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.919 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.539 NA NA
d_depre_1 ~1 0.356 -0.875 1.588 2.617 0.567 0.571
depre_t1 ~1 4.410 4.345 4.476 18.981 132.535 0.000
d_depre_1 ~~ d_depre_1 0.018 -0.007 0.044 0.981 1.407 0.159
d_depre_1 ~ depre_t1 -0.080 -0.356 0.196 -0.137 -0.569 0.569
d_depre_1 ~~ sa06_01_t1 0.000 -0.025 0.026 0.002 0.021 0.983
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.534 0.000

Correlation of general acceptance goal with depression change score (ideal-self) is not significantly different from zero, r = 0.002, p = 0.983.

6.5.2.43 Depression - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7739.163 7820.793 0.919 0.11 0.131
# parameters of interest
params_lcs_depre_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.041 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.554 NA NA
d_depre_1 ~1 0.725 0.404 1.046 1.767 4.421 0.000
depre_t1 ~1 2.896 2.761 3.030 3.758 42.269 0.000
d_depre_1 ~~ d_depre_1 0.149 0.078 0.220 0.885 4.093 0.000
d_depre_1 ~ depre_t1 -0.181 -0.285 -0.076 -0.340 -3.398 0.001
d_depre_1 ~~ sa07_11_t1 -0.067 -0.188 0.055 -0.116 -1.077 0.282
sa07_11_t1 ~~ sa07_11_t1 2.224 2.030 2.418 1.000 22.477 0.000

Correlation of specific, facet-level acceptance goals with depression change score (current-self) is not significantly different from zero, r = -0.116, p = 0.282.

6.5.2.44 Depression - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6288.607 6370.236 0.886 0.069 0.07
# parameters of interest
params_lcs_depre_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.922 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.544 NA NA
d_depre_1 ~1 0.384 -0.862 1.631 2.803 0.604 0.546
depre_t1 ~1 4.410 4.345 4.476 18.986 132.534 0.000
d_depre_1 ~~ d_depre_1 0.018 -0.007 0.044 0.979 1.423 0.155
d_depre_1 ~ depre_t1 -0.086 -0.366 0.193 -0.147 -0.607 0.544
d_depre_1 ~~ sa07_11_t1 -0.015 -0.060 0.029 -0.076 -0.685 0.493
sa07_11_t1 ~~ sa07_11_t1 2.223 2.029 2.417 1.000 22.479 0.000

Correlation of specific, facet-level acceptance goals with depression change score (ideal-self) is not significantly different from zero, r = -0.076, p = 0.493.

6.5.2.45 Volatility - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7593.855 7675.484 0.988 0.038 0.059
# parameters of interest
params_lcs_volat_curr_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                     "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.070 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.612 NA NA
d_volat_1 ~1 0.607 0.299 0.915 1.109 3.861 0.000
volat_t1 ~1 3.221 3.078 3.364 3.364 44.115 0.000
d_volat_1 ~~ d_volat_1 0.252 0.135 0.370 0.843 4.195 0.000
d_volat_1 ~ volat_t1 -0.227 -0.322 -0.131 -0.396 -4.668 0.000
d_volat_1 ~~ sa06_01_t1 -0.069 -0.148 0.010 -0.145 -1.712 0.087
sa06_01_t1 ~~ sa06_01_t1 0.907 0.722 1.093 1.000 9.581 0.000
sa06_01_t1 ~1 4.192 4.084 4.300 4.402 75.886 0.000

Correlation of general acceptance goal with volatility change score (current-self) is not significantly different from zero, r = -0.145, p = 0.087.

6.5.2.46 Volatility - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6893.103 6974.732 0.934 0.047 0.054
# parameters of interest
params_lcs_volat_ideal_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                           "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.841 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.703 NA NA
d_volat_1 ~1 0.284 -0.143 0.712 0.808 1.305 0.192
volat_t1 ~1 1.684 1.602 1.767 3.998 40.009 0.000
d_volat_1 ~~ d_volat_1 0.120 0.032 0.209 0.971 2.674 0.007
d_volat_1 ~ volat_t1 -0.143 -0.403 0.117 -0.171 -1.078 0.281
d_volat_1 ~~ sa06_01_t1 -0.049 -0.107 0.008 -0.149 -1.673 0.094
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.611 0.000

The correlation of general acceptance goal with the volatility change score (ideal-self) is significantly different from zero, r = -0.149, p = 0.094.

6.5.2.47 Volatility - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7774.581 7856.21 0.967 0.065 0.085
# parameters of interest
params_lcs_volat_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.080 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.624 NA NA
d_volat_1 ~1 0.645 0.317 0.973 1.165 3.853 0.000
volat_t1 ~1 3.221 3.078 3.364 3.360 44.096 0.000
d_volat_1 ~~ d_volat_1 0.254 0.136 0.373 0.829 4.200 0.000
d_volat_1 ~ volat_t1 -0.238 -0.340 -0.136 -0.413 -4.583 0.000
d_volat_1 ~~ sa07_12_t1 -0.016 -0.135 0.103 -0.024 -0.260 0.795
sa07_12_t1 ~~ sa07_12_t1 1.655 1.466 1.843 1.000 17.210 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (current-self) is not significantly different from zero, r = -0.024, p = 0.795.

6.5.2.48 Volatility - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7073.097 7154.727 0.934 0.047 0.051
# parameters of interest
params_lcs_volat_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.834 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.691 NA NA
d_volat_1 ~1 0.253 -0.181 0.686 0.723 1.142 0.253
volat_t1 ~1 1.684 1.601 1.766 3.993 40.013 0.000
d_volat_1 ~~ d_volat_1 0.119 0.029 0.210 0.978 2.584 0.010
d_volat_1 ~ volat_t1 -0.124 -0.387 0.139 -0.150 -0.925 0.355
d_volat_1 ~~ sa07_12_t1 -0.016 -0.094 0.062 -0.036 -0.403 0.687
sa07_12_t1 ~~ sa07_12_t1 1.655 1.466 1.843 1.000 17.208 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (ideal-self) is not significantly different from zero, r = -0.036, p = 0.687.

6.5.2.49 Curiosity - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7334.854 7416.484 0.961 0.048 0.057
# parameters of interest
params_lcs_curio_curr_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                     "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.104 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.683 NA NA
d_curio_1 ~1 1.238 0.443 2.033 3.348 3.052 0.002
curio_t1 ~1 4.108 4.009 4.207 6.875 81.628 0.000
d_curio_1 ~~ d_curio_1 0.109 0.037 0.180 0.793 2.955 0.003
d_curio_1 ~ curio_t1 -0.281 -0.467 -0.096 -0.455 -2.972 0.003
d_curio_1 ~~ sa06_01_t1 0.006 -0.051 0.062 0.018 0.200 0.842
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.655 0.000

Correlation of general acceptance goal with curiosity change score (current-self) is not significantly different from zero, r = 0.018, p = 0.842.

6.5.2.50 Curiosity - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7260.109 7341.738 1 0 0.031
# parameters of interest
params_lcs_curio_ideal_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                           "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.980 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.631 NA NA
d_curio_1 ~1 0.841 -0.189 1.872 4.065 1.600 0.110
curio_t1 ~1 4.518 4.448 4.588 14.051 126.015 0.000
d_curio_1 ~~ d_curio_1 0.039 -0.007 0.086 0.916 1.648 0.099
d_curio_1 ~ curio_t1 -0.186 -0.412 0.039 -0.290 -1.622 0.105
d_curio_1 ~~ sa06_01_t1 0.015 -0.023 0.054 0.081 0.778 0.437
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.600 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.612 0.000

Correlation of general acceptance goal with curiosity change score (ideal-self) is not significantly different from zero, r = 0.081, p = 0.437.

6.5.2.51 Curiosity - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7527.651 7609.281 0.912 0.074 0.089
# parameters of interest
params_lcs_curio_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.149 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.757 NA NA
d_curio_1 ~1 1.472 0.674 2.269 3.747 3.618 0.000
curio_t1 ~1 4.108 4.010 4.206 6.888 81.883 0.000
d_curio_1 ~~ d_curio_1 0.114 0.042 0.185 0.736 3.107 0.002
d_curio_1 ~ curio_t1 -0.338 -0.525 -0.151 -0.514 -3.549 0.000
d_curio_1 ~~ sa07_13_t1 -0.119 -0.212 -0.025 -0.264 -2.492 0.013
sa07_13_t1 ~~ sa07_13_t1 1.787 1.551 2.024 1.000 14.808 0.000

The correlation of specific, facet-level acceptance goals with the curiosity change score (current-self) is significantly different from zero, r = -0.264, p = 0.013.

6.5.2.52 Curiosity - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7456.466 7538.096 0.982 0.025 0.045
# parameters of interest
params_lcs_curio_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.987 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.648 NA NA
d_curio_1 ~1 0.912 -0.085 1.909 4.253 1.793 0.073
curio_t1 ~1 4.518 4.448 4.589 13.837 126.006 0.000
d_curio_1 ~~ d_curio_1 0.042 -0.006 0.089 0.905 1.715 0.086
d_curio_1 ~ curio_t1 -0.202 -0.420 0.015 -0.308 -1.821 0.069
d_curio_1 ~~ sa07_13_t1 -0.064 -0.132 0.003 -0.236 -1.863 0.062
sa07_13_t1 ~~ sa07_13_t1 1.786 1.550 2.023 1.000 14.798 0.000

Correlation of specific, facet-level acceptance goals with curiosity change score (ideal-self) is not significantly different from zero, r = -0.236, p = 0.062.

6.5.2.53 Aesthetic - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7424.942 7506.571 0.98 0.047 0.056
# parameters of interest
params_lcs_aesth_curr_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                     "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.107 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.608 NA NA
d_aesth_1 ~1 0.704 0.426 0.982 18.808 4.956 0.000
aesth_t1 ~1 2.906 2.785 3.027 42.683 47.045 0.000
d_aesth_1 ~~ d_aesth_1 0.001 -0.004 0.006 0.805 0.452 0.651
d_aesth_1 ~ aesth_t1 -0.243 -0.338 -0.148 -0.442 -5.016 0.000
d_aesth_1 ~~ sa06_01_t1 -0.003 -0.012 0.006 -0.097 -0.699 0.485
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.601 0.000
sa06_01_t1 ~1 4.190 4.081 4.299 4.401 75.615 0.000

Correlation of general acceptance goal with aesthetic change score (current-self) is not significantly different from zero, r = -0.097, p = 0.485.

6.5.2.54 Aesthetic - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7305.061 7386.69 0.969 0.051 0.07
# parameters of interest
params_lcs_aesth_ideal_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                           "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.957 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.661 NA NA
d_aesth_1 ~1 0.605 0.128 1.082 13.584 2.484 0.013
aesth_t1 ~1 3.157 3.020 3.294 49.007 45.200 0.000
d_aesth_1 ~~ d_aesth_1 0.002 -0.006 0.010 0.922 0.432 0.666
d_aesth_1 ~ aesth_t1 -0.192 -0.341 -0.044 -0.279 -2.539 0.011
d_aesth_1 ~~ sa06_01_t1 0.002 -0.005 0.009 0.050 0.586 0.558
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.602 0.000
sa06_01_t1 ~1 4.190 4.082 4.299 4.401 75.680 0.000

Correlation of general acceptance goal with aesthetic change score (ideal-self) is not significantly different from zero, r = 0.05, p = 0.558.

6.5.2.55 Aesthetic - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7641.241 7722.87 0.968 0.06 0.072
# parameters of interest
params_lcs_aesth_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.100 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.599 NA NA
d_aesth_1 ~1 0.680 0.399 0.962 17.934 4.734 0.000
aesth_t1 ~1 2.906 2.785 3.027 41.712 47.044 0.000
d_aesth_1 ~~ d_aesth_1 0.001 -0.004 0.006 0.814 0.461 0.645
d_aesth_1 ~ aesth_t1 -0.235 -0.331 -0.139 -0.431 -4.783 0.000
d_aesth_1 ~~ sa07_14_t1 0.000 -0.008 0.007 -0.008 -0.100 0.921
sa07_14_t1 ~~ sa07_14_t1 1.877 1.681 2.073 1.000 18.768 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (current-self) is not significantly different from zero, r = -0.008, p = 0.921.

6.5.2.56 Aesthetic - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7517.688 7599.317 0.989 0.03 0.042
# parameters of interest
params_lcs_aesth_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.950 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.653 NA NA
d_aesth_1 ~1 0.572 0.114 1.030 12.768 2.446 0.014
aesth_t1 ~1 3.157 3.020 3.294 48.440 45.192 0.000
d_aesth_1 ~~ d_aesth_1 0.002 -0.006 0.010 0.930 0.437 0.662
d_aesth_1 ~ aesth_t1 -0.182 -0.325 -0.039 -0.265 -2.499 0.012
d_aesth_1 ~~ sa07_14_t1 -0.007 -0.025 0.011 -0.119 -0.770 0.441
sa07_14_t1 ~~ sa07_14_t1 1.877 1.681 2.073 1.000 18.765 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (ideal-self) is not significantly different from zero, r = -0.119, p = 0.441.

6.5.2.57 Imagination - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7289.365 7370.994 0.98 0.042 0.045
# parameters of interest
params_lcs_imagi_curr_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                     "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.074 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.518 NA NA
d_imagi_1 ~1 0.760 0.303 1.216 2.193 3.263 0.001
imagi_t1 ~1 3.614 3.509 3.720 5.034 67.008 0.000
d_imagi_1 ~~ d_imagi_1 0.103 0.037 0.169 0.856 3.056 0.002
d_imagi_1 ~ imagi_t1 -0.183 -0.301 -0.065 -0.379 -3.048 0.002
d_imagi_1 ~~ sa06_01_t1 0.020 -0.040 0.081 0.067 0.663 0.507
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.604 0.000
sa06_01_t1 ~1 4.190 4.081 4.298 4.401 75.616 0.000

Correlation of general acceptance goal with imagination change score (current-self) is not significantly different from zero, r = 0.067, p = 0.507.

6.5.2.58 Imagination - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 6764.378 6846.007 0.948 0.041 0.058
# parameters of interest
params_lcs_imagi_ideal_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                           "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.903 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.590 NA NA
d_imagi_1 ~1 0.433 -0.831 1.698 1.933 0.672 0.502
imagi_t1 ~1 4.608 4.543 4.672 13.443 140.690 0.000
d_imagi_1 ~~ d_imagi_1 0.049 0.009 0.089 0.976 2.387 0.017
d_imagi_1 ~ imagi_t1 -0.100 -0.369 0.169 -0.153 -0.730 0.465
d_imagi_1 ~~ sa06_01_t1 -0.029 -0.075 0.017 -0.138 -1.246 0.213
sa06_01_t1 ~~ sa06_01_t1 0.906 0.721 1.091 1.000 9.602 0.000
sa06_01_t1 ~1 4.189 4.081 4.298 4.401 75.483 0.000

Correlation of general acceptance goal with imagination change score (ideal-self) is not significantly different from zero, r = -0.138, p = 0.213.

6.5.2.59 Imagination - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7533.845 7615.474 0.938 0.076 0.101
# parameters of interest
params_lcs_imagi_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.093 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.541 NA NA
d_imagi_1 ~1 0.836 0.386 1.287 2.354 3.639 0.000
imagi_t1 ~1 3.614 3.509 3.720 5.035 67.045 0.000
d_imagi_1 ~~ d_imagi_1 0.105 0.039 0.170 0.830 3.128 0.002
d_imagi_1 ~ imagi_t1 -0.204 -0.321 -0.088 -0.413 -3.432 0.001
d_imagi_1 ~~ sa07_15_t1 -0.068 -0.161 0.025 -0.145 -1.428 0.153
sa07_15_t1 ~~ sa07_15_t1 2.088 1.892 2.283 1.000 20.919 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (current-self) is not significantly different from zero, r = -0.145, p = 0.153.

6.5.2.60 Imagination - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 22 7011.995 7093.624 0.972 0.03 0.053
# parameters of interest
params_lcs_imagi_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.911 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.607 NA NA
d_imagi_1 ~1 0.521 -0.735 1.778 2.297 0.813 0.416
imagi_t1 ~1 4.607 4.543 4.672 13.513 140.770 0.000
d_imagi_1 ~~ d_imagi_1 0.050 0.009 0.090 0.968 2.419 0.016
d_imagi_1 ~ imagi_t1 -0.119 -0.387 0.148 -0.179 -0.874 0.382
d_imagi_1 ~~ sa07_15_t1 -0.002 -0.069 0.064 -0.008 -0.073 0.942
sa07_15_t1 ~~ sa07_15_t1 2.087 1.891 2.283 1.000 20.904 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (ideal-self) is not significantly different from zero, r = -0.008, p = 0.942.

6.5.3 Hyp 5: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp5 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.047 0.140 2.273 0.023
extraversion ideal general 0.018 0.081 1.133 0.257
extraversion current specific 0.024 0.082 0.739 0.460
extraversion ideal specific -0.035 -0.179 -1.543 0.123
agreeableness current general 0.029 0.150 1.548 0.122
agreeableness ideal general 0.001 0.003 0.037 0.970
agreeableness current specific 0.002 0.011 0.105 0.916
agreeableness ideal specific -0.013 -0.057 -0.548 0.583
conscientiousness current general -0.003 -0.008 -0.126 0.899
conscientiousness ideal general -0.022 -0.080 -1.189 0.235
conscientiousness current specific -0.115 -0.300 -2.610 0.009
conscientiousness ideal specific -0.040 -0.120 -1.485 0.137
neuroticism current general -0.052 -0.131 -1.725 0.085
neuroticism ideal general -0.017 -0.060 -0.802 0.422
neuroticism current specific 0.035 0.097 1.042 0.297
neuroticism ideal specific 0.045 0.183 2.622 0.009
openness current general 0.003 0.013 0.174 0.862
openness ideal general 0.050 0.187 1.799 0.072
openness current specific -0.030 -0.151 -1.683 0.092
openness ideal specific -0.036 -0.220 -2.098 0.036

Five covariances significantly differ from zero:

  • changes in current-level extraversion covary with the general acceptance goal
  • changes in current-level conscientiousness covary with the specific acceptance goals (latent factor of the three C facets) -> unexpected direction of the effect!
  • changes in ideal-level neuroticism covary with the specific acceptance goals (latent factor of the three N facets)
  • changes in ideal-level openness covary with the specific acceptance goals (latent factor of the three O facets)

Results summary across the Big Five facets: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.062 0.177 2.239 0.025
sociability ideal general -0.005 -0.020 -0.239 0.811
sociability current specific -0.012 -0.024 -0.257 0.797
sociability ideal specific -0.045 -0.133 -0.986 0.324
assertiveness current general 0.044 0.144 1.738 0.082
assertiveness ideal general 0.017 0.100 1.059 0.290
assertiveness current specific -0.004 -0.010 -0.106 0.916
assertiveness ideal specific -0.021 -0.082 -0.856 0.392
energy current general -0.013 -0.050 -0.684 0.494
energy ideal general -0.014 -0.144 -1.038 0.299
energy current specific 0.047 0.125 1.344 0.179
energy ideal specific 0.013 0.096 0.752 0.452
compassion current general 0.074 0.181 1.704 0.088
compassion ideal general 0.026 0.075 0.709 0.478
compassion current specific 0.019 0.035 0.406 0.685
compassion ideal specific -0.067 -0.146 -1.334 0.182
respectfulness current general 0.006 0.027 0.270 0.787
respectfulness ideal general -0.010 -0.052 -0.517 0.605
respectfulness current specific 0.003 0.008 0.081 0.935
respectfulness ideal specific -0.028 -0.107 -1.012 0.311
trust current general 0.001 0.003 0.031 0.976
trust ideal general -0.030 -0.120 -1.293 0.196
trust current specific 0.062 0.162 1.858 0.063
trust ideal specific 0.034 0.093 0.991 0.322
organization current general 0.019 0.048 0.596 0.551
organization ideal general 0.021 0.107 1.126 0.260
organization current specific 0.167 0.255 2.410 0.016
organization ideal specific 0.036 0.114 1.159 0.246
productiveness current general -0.013 -0.039 -0.489 0.625
productiveness ideal general -0.005 -0.027 -0.288 0.774
productiveness current specific 0.099 0.183 1.595 0.111
productiveness ideal specific -0.004 -0.013 -0.135 0.892
responsibility current general 0.012 0.051 0.445 0.657
responsibility ideal general -0.009 -0.027 -0.278 0.781
responsibility current specific -0.178 -0.471 -3.430 0.001
responsibility ideal specific -0.045 -0.092 -0.983 0.326
anxiety current general 0.026 0.064 0.646 0.518
anxiety ideal general 0.019 0.071 0.811 0.418
anxiety current specific -0.023 -0.037 -0.348 0.728
anxiety ideal specific 0.011 0.025 0.187 0.852
depression current general 0.021 0.058 0.744 0.457
depression ideal general 0.000 0.002 0.021 0.983
depression current specific -0.067 -0.116 -1.077 0.282
depression ideal specific -0.015 -0.076 -0.685 0.493
volatility current general -0.069 -0.145 -1.712 0.087
volatility ideal general -0.049 -0.149 -1.673 0.094
volatility current specific -0.016 -0.024 -0.260 0.795
volatility ideal specific -0.016 -0.036 -0.403 0.687
curiosity current general 0.006 0.018 0.200 0.842
curiosity ideal general 0.015 0.081 0.778 0.437
curiosity current specific -0.119 -0.264 -2.492 0.013
curiosity ideal specific -0.064 -0.236 -1.863 0.062
aesthetic current general -0.003 -0.097 -0.699 0.485
aesthetic ideal general 0.002 0.050 0.586 0.558
aesthetic current specific 0.000 -0.008 -0.100 0.921
aesthetic ideal specific -0.007 -0.119 -0.770 0.441
imagination current general 0.020 0.067 0.663 0.507
imagination ideal general -0.029 -0.138 -1.246 0.213
imagination current specific -0.068 -0.145 -1.428 0.153
imagination ideal specific -0.002 -0.008 -0.073 0.942

Looking at the facets, we find four covariances that significantly differ from zero (relatively unsystematic across facets / current-ideal / goal dimension):
- Changes in current-level sociability covary with the general acceptance goal.
- Further, changes in current-level organization, responsibility, and curiosity covary with the respective specific facet acceptance goal.

Prepare data frame for plotting:

Show the code
df_table_hyp5_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp5_plot <- df_table_hyp5_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general acceptance goal
  • specific = specific, facet-level acceptance goal(s)
Show the code
ggplot(df_table_hyp5_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6 H6: Desire to change and frequency of skill-building behaviors as moderators of change in personality in skill-building group

Desire to change and frequency of skill-building behaviors measured at the follow-up assessment will be positively related to change in current-self ratings in the skill-building group.

To test this hypothesis, we will estimate the mean-level difference in current trait ratings between baseline and follow up using a latent change model for each big five domain and facet. We will then include two moderators. The first will indicate how much the individual wanted to change on a given big five domain or facet. The second will indicate their frequency of skill-building behaviors. We will estimate the main effects of each of these variables and the interaction between these variables on the trait change score.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb_mod <- df_sbsa %>% 
  filter(rando=="Skill-Building") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals
                                  "sb04"))) %>% # frequency skill-building behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of skill-building behaviors measured at T2
# colnames(df_sbsa_wide_pers_sb_mod)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb_mod <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Skill-Building") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb_mod)

6.6.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_mod_goal <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~ goals               # This estimates the moderation effect on personality at T1
d_trait_1 ~ trait_t1 + goals   # This estimates the self-feedback parameter and the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), trait_model_fit))
}  

# 2nd, for frequency of skill-building behavior

trait_template_mod_frequ <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~ frequ               # This estimates the moderation effect on personality at T1
d_trait_1 ~ trait_t1 + frequ   # This estimates the self-feedback parameter and the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), trait_model_fit))
}  
6.6.1.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 6131.956 6229.687 0.979 0.056 0.041
# parameters of interest
params_lcs_extra_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.995 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.570 NA NA
d_extra_1 ~1 0.447 0.124 0.769 1.343 2.713 0.007
extra_t1 ~1 2.755 2.677 2.832 4.752 69.691 0.000
d_extra_1 ~~ d_extra_1 0.101 0.063 0.138 0.911 5.236 0.000
extra_t1 ~ goals -0.530 -0.728 -0.333 -0.601 -5.263 0.000
d_extra_1 ~ extra_t1 -0.112 -0.229 0.006 -0.195 -1.864 0.062
d_extra_1 ~ goals 0.070 -0.076 0.215 0.138 0.939 0.348
goals ~~ goals 0.431 0.189 0.674 1.000 3.487 0.000

The moderation effect of specific, facet-level change goals with the extraversion change score (current-self) is not significantly different from zero, b = 0.07, p = 0.348.

6.6.1.2 Extraversion: frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 5856.675 5954.407 0.985 0.05 0.054
# parameters of interest
params_lcs_extra_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of skill building
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.994 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.569 NA NA
d_extra_1 ~1 0.616 0.348 0.884 1.864 4.503 0.000
extra_t1 ~1 2.755 2.678 2.833 4.776 69.689 0.000
d_extra_1 ~~ d_extra_1 0.097 0.062 0.133 0.894 5.354 0.000
extra_t1 ~ frequ 0.127 -0.020 0.274 0.156 1.699 0.089
d_extra_1 ~ extra_t1 -0.173 -0.266 -0.080 -0.303 -3.655 0.000
d_extra_1 ~ frequ 0.083 -0.004 0.170 0.177 1.862 0.063
frequ ~~ frequ 0.498 0.337 0.660 1.000 6.040 0.000

The moderation effect of the frequency of skill-building behaviors with the extraversion change score (current-self) is not significantly different from zero, b = 0.083, p = 0.063.

6.6.1.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 5846.862 5944.593 0.98 0.048 0.045
# parameters of interest
params_lcs_agree_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.058 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.541 NA NA
d_agree_1 ~1 0.648 0.338 0.957 2.993 4.103 0.000
agree_t1 ~1 3.344 3.278 3.410 7.897 99.667 0.000
d_agree_1 ~~ d_agree_1 0.041 0.019 0.062 0.866 3.714 0.000
agree_t1 ~ goals -0.161 -0.253 -0.070 -0.337 -3.470 0.001
d_agree_1 ~ agree_t1 -0.171 -0.263 -0.080 -0.335 -3.657 0.000
d_agree_1 ~ goals 0.018 -0.035 0.070 0.072 0.661 0.509
goals ~~ goals 0.783 0.431 1.136 1.000 4.354 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (current-self) is not significantly different from zero, b = 0.018, p = 0.509.

6.6.1.4 Agreeableness: frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 5426.782 5524.513 0.99 0.034 0.04
# parameters of interest
params_lcs_agree_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of skill building
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.055 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.541 NA NA
d_agree_1 ~1 0.769 0.459 1.079 3.492 4.859 0.000
agree_t1 ~1 3.343 3.277 3.409 7.786 99.351 0.000
d_agree_1 ~~ d_agree_1 0.038 0.019 0.058 0.792 3.861 0.000
agree_t1 ~ frequ 0.099 0.010 0.188 0.167 2.180 0.029
d_agree_1 ~ agree_t1 -0.207 -0.297 -0.117 -0.404 -4.516 0.000
d_agree_1 ~ frequ 0.088 0.026 0.150 0.290 2.771 0.006
frequ ~~ frequ 0.525 0.362 0.688 1.000 6.305 0.000

The frequency of skill-building behaviors significantly moderates changes in agreeableness (current-self), b = 0.088, p = 0.006.

6.6.1.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 5889.408 5987.139 0.987 0.054 0.03
# parameters of interest
params_lcs_consc_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.041 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.452 NA NA
d_consc_1 ~1 0.468 0.148 0.788 1.450 2.870 0.004
consc_t1 ~1 3.270 3.178 3.363 4.399 69.246 0.000
d_consc_1 ~~ d_consc_1 0.094 0.059 0.129 0.900 5.203 0.000
consc_t1 ~ goals -0.379 -0.457 -0.300 -0.613 -9.415 0.000
d_consc_1 ~ consc_t1 -0.105 -0.199 -0.011 -0.241 -2.180 0.029
d_consc_1 ~ goals 0.028 -0.030 0.086 0.105 0.949 0.343
goals ~~ goals 1.450 1.137 1.762 1.000 9.099 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.028, p = 0.343.

6.6.1.6 Conscientiousness: frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 5609.39 5707.121 1 0 0.021
# parameters of interest
params_lcs_consc_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of skill building
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.041 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.453 NA NA
d_consc_1 ~1 0.595 0.367 0.823 1.847 5.111 0.000
consc_t1 ~1 3.271 3.178 3.363 4.421 69.279 0.000
d_consc_1 ~~ d_consc_1 0.090 0.056 0.124 0.864 5.154 0.000
consc_t1 ~ frequ 0.121 -0.030 0.273 0.117 1.573 0.116
d_consc_1 ~ consc_t1 -0.144 -0.208 -0.080 -0.330 -4.392 0.000
d_consc_1 ~ frequ 0.093 0.019 0.168 0.206 2.460 0.014
frequ ~~ frequ 0.506 0.344 0.668 1.000 6.123 0.000

The frequency of skill-building behaviors significantly moderates changes in conscientiousness (current-self), b = 0.093, p = 0.014.

6.6.1.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 6532.499 6630.23 0.978 0.068 0.033
# parameters of interest
params_lcs_neuro_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.014 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.603 NA NA
d_neuro_1 ~1 0.683 0.202 1.163 1.349 2.784 0.005
neuro_t1 ~1 3.533 3.433 3.632 4.155 69.490 0.000
d_neuro_1 ~~ d_neuro_1 0.226 0.157 0.295 0.884 6.423 0.000
neuro_t1 ~ goals 0.515 0.420 0.610 0.712 10.608 0.000
d_neuro_1 ~ neuro_t1 -0.261 -0.397 -0.124 -0.438 -3.737 0.000
d_neuro_1 ~ goals 0.071 -0.040 0.183 0.166 1.253 0.210
goals ~~ goals 1.379 1.052 1.706 1.000 8.270 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (current-self) is not significantly different from zero, b = 0.071, p = 0.21.

6.6.1.8 Neuroticism: frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 6206.687 6304.419 0.984 0.056 0.048
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of skill building
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.015 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.603 NA NA
d_neuro_1 ~1 0.419 0.148 0.689 0.838 3.036 0.002
neuro_t1 ~1 3.532 3.433 3.631 4.200 69.641 0.000
d_neuro_1 ~~ d_neuro_1 0.221 0.151 0.292 0.887 6.151 0.000
neuro_t1 ~ frequ 0.115 -0.076 0.306 0.098 1.180 0.238
d_neuro_1 ~ neuro_t1 -0.185 -0.262 -0.109 -0.312 -4.736 0.000
d_neuro_1 ~ frequ -0.069 -0.182 0.044 -0.099 -1.203 0.229
frequ ~~ frequ 0.511 0.345 0.678 1.000 6.025 0.000

The moderation effect of the frequency of skill-building behaviors with the neuroticism change score (current-self) is not significantly different from zero, b = -0.069, p = 0.229.

6.6.1.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 5956.917 6054.648 0.983 0.05 0.044
# parameters of interest
params_lcs_openn_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.914 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.395 NA NA
d_openn_1 ~1 -0.120 -0.452 0.211 -0.639 -0.712 0.477
openn_t1 ~1 3.553 3.487 3.620 8.157 104.851 0.000
d_openn_1 ~~ d_openn_1 0.031 0.010 0.052 0.886 2.919 0.004
openn_t1 ~ goals -0.211 -0.321 -0.100 -0.302 -3.740 0.000
d_openn_1 ~ openn_t1 0.052 -0.041 0.144 0.119 1.089 0.276
d_openn_1 ~ goals 0.106 0.032 0.181 0.354 2.799 0.005
goals ~~ goals 0.391 0.211 0.572 1.000 4.245 0.000

Trait-specific (facet) change goals significantly moderate changes in openness (current-self), b = 0.106, p = 0.005.

6.6.1.10 Openness: frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 26 5714.045 5811.776 0.995 0.025 0.026
# parameters of interest
params_lcs_openn_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of skill building
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.913 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.395 NA NA
d_openn_1 ~1 0.153 -0.170 0.477 0.807 0.928 0.353
openn_t1 ~1 3.553 3.486 3.619 8.089 104.824 0.000
d_openn_1 ~~ d_openn_1 0.033 0.013 0.054 0.920 3.168 0.002
openn_t1 ~ frequ 0.156 0.058 0.253 0.249 3.132 0.002
d_openn_1 ~ openn_t1 -0.025 -0.116 0.065 -0.058 -0.546 0.585
d_openn_1 ~ frequ 0.079 0.008 0.150 0.291 2.167 0.030
frequ ~~ frequ 0.493 0.334 0.651 1.000 6.092 0.000

The frequency of skill-building behaviors significantly moderates changes in openness (current-self), b = 0.079, p = 0.03.

6.6.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goal

facet_template_mod_goal <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~ ind_goal               # This estimates the moderation effect on personality at T1
d_facet_1 ~ facet_t1 + ind_goal   # This estimates the self-feedback parameter and the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), facet_model_fit))
}  

# 2nd, for frequency of skill-building behavior

facet_template_mod_frequ <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~ frequ               # This estimates the moderation effect on personality at T1
d_facet_1 ~ facet_t1 + frequ   # This estimates the self-feedback parameter and the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), facet_model_fit))
}  
6.6.2.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7722.367 7808.821 0.958 0.072 0.048
# parameters of interest
params_lcs_socia_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.013 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.633 NA NA
d_socia_1 ~1 0.863 0.371 1.355 1.613 3.439 0.001
socia_t1 ~1 3.990 3.619 4.361 4.664 21.092 0.000
d_socia_1 ~~ d_socia_1 0.255 0.154 0.356 0.889 4.937 0.000
d_socia_1 ~ socia_t1 -0.217 -0.328 -0.105 -0.346 -3.816 0.000
d_socia_1 ~ sb07_01_t1 -0.013 -0.083 0.056 -0.030 -0.374 0.708
sb07_01_t1 ~~ sb07_01_t1 1.442 1.240 1.644 1.000 13.995 0.000

The moderation effect of the facet-specific change goal with the sociability change score (current-self) is not significantly different from zero, b = -0.013, p = 0.708.

6.6.2.2 Sociability - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9385.649 9498.416 0.959 0.063 0.053
# parameters of interest
params_lcs_socia_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of skill building
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.013 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.629 NA NA
d_socia_1 ~1 0.799 0.496 1.102 1.511 5.168 0.000
socia_t1 ~1 2.781 2.648 2.913 3.268 41.034 0.000
d_socia_1 ~~ d_socia_1 0.247 0.148 0.347 0.885 4.873 0.000
socia_t1 ~ frequ 0.150 -0.054 0.354 0.126 1.443 0.149
d_socia_1 ~ socia_t1 -0.212 -0.312 -0.111 -0.341 -4.122 0.000
d_socia_1 ~ frequ 0.055 -0.077 0.186 0.074 0.813 0.416
frequ ~~ frequ 0.508 0.347 0.669 1.000 6.180 0.000

The moderation effect of the frequency of skill-building behaviors with sociability change score (ideal-self) is not significantly different from zero, b = 0.055, p = 0.416.

6.6.2.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 8086.648 8173.103 0.972 0.048 0.047
# parameters of interest
params_lcs_asser_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.999 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.350 NA NA
d_asser_1 ~1 0.030 -0.458 0.518 0.145 0.122 0.903
asser_t1 ~1 3.588 3.275 3.901 6.000 22.450 0.000
d_asser_1 ~~ d_asser_1 0.041 -0.007 0.088 0.926 1.674 0.094
d_asser_1 ~ asser_t1 -0.036 -0.163 0.090 -0.104 -0.565 0.572
d_asser_1 ~ sb07_02_t1 0.039 -0.016 0.095 0.221 1.397 0.162
sb07_02_t1 ~~ sb07_02_t1 1.379 1.196 1.561 1.000 14.829 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score (current-self) is not significantly different from zero, b = 0.039, p = 0.162.

6.6.2.4 Assertiveness - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9720.475 9833.242 0.971 0.045 0.048
# parameters of interest
params_lcs_asser_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of skill building
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.997 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.351 NA NA
d_asser_1 ~1 0.263 -0.081 0.607 1.308 1.496 0.135
asser_t1 ~1 3.034 2.925 3.143 5.318 54.568 0.000
d_asser_1 ~~ d_asser_1 0.038 -0.004 0.079 0.930 1.761 0.078
asser_t1 ~ frequ 0.112 -0.029 0.252 0.139 1.552 0.121
d_asser_1 ~ asser_t1 -0.069 -0.183 0.044 -0.197 -1.199 0.231
d_asser_1 ~ frequ 0.058 -0.033 0.149 0.205 1.245 0.213
frequ ~~ frequ 0.508 0.347 0.670 1.000 6.177 0.000

The moderation effect of the frequency of skill-building behaviors with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.058, p = 0.213.

6.6.2.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 8042.934 8129.388 0.945 0.072 0.049
# parameters of interest
params_lcs_energ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.993 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.563 NA NA
d_energ_1 ~1 0.311 0.033 0.589 1.316 2.195 0.028
energ_t1 ~1 2.166 1.957 2.375 5.197 20.327 0.000
d_energ_1 ~~ d_energ_1 0.052 0.013 0.090 0.927 2.623 0.009
d_energ_1 ~ energ_t1 -0.157 -0.275 -0.039 -0.277 -2.599 0.009
d_energ_1 ~ sb07_03_t1 0.003 -0.029 0.035 0.015 0.177 0.860
sb07_03_t1 ~~ sb07_03_t1 1.539 1.321 1.756 1.000 13.847 0.000

The moderation effect of the facet-specific change goal with the energy change score (current-self) is not significantly different from zero, b = 0.003, p = 0.86.

6.6.2.6 Energy - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9657.38 9770.147 0.954 0.059 0.055
# parameters of interest
params_lcs_energ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of skill building
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.988 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.561 NA NA
d_energ_1 ~1 0.352 0.063 0.640 1.401 2.389 0.017
energ_t1 ~1 2.681 2.574 2.789 6.061 48.922 0.000
d_energ_1 ~~ d_energ_1 0.057 0.018 0.095 0.898 2.872 0.004
energ_t1 ~ frequ -0.124 -0.250 0.002 -0.197 -1.936 0.053
d_energ_1 ~ energ_t1 -0.170 -0.278 -0.061 -0.299 -3.069 0.002
d_energ_1 ~ frequ -0.066 -0.149 0.017 -0.185 -1.556 0.120
frequ ~~ frequ 0.493 0.329 0.657 1.000 5.895 0.000

The moderation effect of the frequency of skill-building behaviors with the energy change score (ideal-self) is not significantly different from zero, b = -0.066, p = 0.12.

6.6.2.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7904.647 7991.102 0.996 0.016 0.036
# parameters of interest
params_lcs_compa_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.147 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.348 NA NA
d_compa_1 ~1 0.742 0.128 1.357 3.576 2.366 0.018
compa_t1 ~1 4.508 4.319 4.698 6.588 46.572 0.000
d_compa_1 ~~ d_compa_1 0.030 -0.032 0.092 0.697 0.953 0.341
d_compa_1 ~ compa_t1 -0.162 -0.290 -0.033 -0.532 -2.471 0.013
d_compa_1 ~ sb07_04_t1 0.009 -0.039 0.057 0.059 0.360 0.719
sb07_04_t1 ~~ sb07_04_t1 1.929 1.729 2.129 1.000 18.932 0.000

The moderation effect of the facet-specific change goal with the compassion change score (current-self) is not significantly different from zero, b = 0.009, p = 0.719.

6.6.2.8 Compassion - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9421.466 9534.233 0.991 0.023 0.044
# parameters of interest
params_lcs_compa_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of skill building
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.147 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.345 NA NA
d_compa_1 ~1 0.872 0.357 1.387 4.287 3.316 0.001
compa_t1 ~1 4.176 4.081 4.270 6.177 86.302 0.000
d_compa_1 ~~ d_compa_1 0.022 -0.036 0.081 0.536 0.742 0.458
compa_t1 ~ frequ 0.165 0.024 0.305 0.177 2.301 0.021
d_compa_1 ~ compa_t1 -0.187 -0.307 -0.068 -0.622 -3.076 0.002
d_compa_1 ~ frequ 0.114 0.022 0.206 0.409 2.436 0.015
frequ ~~ frequ 0.528 0.365 0.691 1.000 6.343 0.000

The frequency of skill-building behaviors significantly moderates changes in compassion (current-self), b = 0.114, p = 0.015.

6.6.2.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7196.055 7282.51 0.952 0.066 0.052
# parameters of interest
params_lcs_respe_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.097 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.599 NA NA
d_respe_1 ~1 0.886 0.263 1.509 2.743 2.788 0.005
respe_t1 ~1 4.812 4.678 4.947 8.124 70.098 0.000
d_respe_1 ~~ d_respe_1 0.084 0.043 0.125 0.803 4.018 0.000
d_respe_1 ~ respe_t1 -0.204 -0.330 -0.078 -0.374 -3.166 0.002
d_respe_1 ~ sb07_05_t1 0.031 -0.018 0.081 0.130 1.255 0.209
sb07_05_t1 ~~ sb07_05_t1 1.779 1.560 1.998 1.000 15.895 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score (current-self) is not significantly different from zero, b = 0.031, p = 0.209.

6.6.2.10 Respectfulness - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 8772.712 8885.479 0.959 0.056 0.051
# parameters of interest
params_lcs_respe_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of skill building
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.097 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.600 NA NA
d_respe_1 ~1 1.147 0.625 1.668 3.607 4.310 0.000
respe_t1 ~1 4.391 4.309 4.474 7.549 104.156 0.000
d_respe_1 ~~ d_respe_1 0.079 0.041 0.118 0.784 4.032 0.000
respe_t1 ~ frequ 0.109 -0.017 0.235 0.134 1.689 0.091
d_respe_1 ~ respe_t1 -0.247 -0.361 -0.134 -0.452 -4.265 0.000
d_respe_1 ~ frequ 0.081 0.001 0.161 0.183 1.982 0.047
frequ ~~ frequ 0.517 0.354 0.679 1.000 6.227 0.000

The frequency of skill-building behaviors significantly moderates changes in respectfulness (current-self), b = 0.081, p = 0.047.

6.6.2.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 8252.185 8338.64 0.94 0.067 0.052
# parameters of interest
params_lcs_trust_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.031 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.562 NA NA
d_trust_1 ~1 0.414 0.011 0.816 1.249 2.015 0.044
trust_t1 ~1 2.756 2.544 2.968 4.535 25.461 0.000
d_trust_1 ~~ d_trust_1 0.098 0.016 0.180 0.890 2.330 0.020
d_trust_1 ~ trust_t1 -0.175 -0.315 -0.035 -0.321 -2.454 0.014
d_trust_1 ~ sb07_06_t1 -0.014 -0.062 0.035 -0.055 -0.550 0.583
sb07_06_t1 ~~ sb07_06_t1 1.794 1.613 1.974 1.000 19.496 0.000

The moderation effect of the facet-specific change goal with the trust change score (current-self) is not significantly different from zero, b = -0.014, p = 0.583.

6.6.2.12 Trust - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9786.117 9898.884 0.963 0.05 0.046
# parameters of interest
params_lcs_trust_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of skill building
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.033 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.557 NA NA
d_trust_1 ~1 0.415 0.023 0.808 1.273 2.077 0.038
trust_t1 ~1 2.894 2.773 3.015 4.778 46.927 0.000
d_trust_1 ~~ d_trust_1 0.090 0.013 0.166 0.842 2.302 0.021
trust_t1 ~ frequ -0.082 -0.216 0.052 -0.098 -1.206 0.228
d_trust_1 ~ trust_t1 -0.189 -0.329 -0.049 -0.350 -2.645 0.008
d_trust_1 ~ frequ -0.102 -0.209 0.004 -0.226 -1.883 0.060
frequ ~~ frequ 0.519 0.356 0.681 1.000 6.252 0.000

The moderation effect of the skill-building behaviors with the trust change score (current-self) is not significantly different from zero, b = -0.102, p = 0.06.

6.6.2.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7779.505 7865.959 0.951 0.086 0.044
# parameters of interest
params_lcs_organ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.086 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.521 NA NA
d_organ_1 ~1 0.413 0.203 0.622 0.778 3.858 0.000
organ_t1 ~1 1.319 1.013 1.625 1.194 8.453 0.000
d_organ_1 ~~ d_organ_1 0.236 0.128 0.344 0.839 4.266 0.000
d_organ_1 ~ organ_t1 -0.176 -0.283 -0.069 -0.367 -3.227 0.001
d_organ_1 ~ sb07_07_t1 -0.019 -0.096 0.057 -0.053 -0.490 0.624
sb07_07_t1 ~~ sb07_07_t1 2.176 1.955 2.398 1.000 19.238 0.000

The moderation effect of the facet-specific change goal with the organization change score (current-self) is not significantly different from zero, b = -0.019, p = 0.624.

6.6.2.14 Organization - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9357.789 9470.556 0.988 0.035 0.034
# parameters of interest
params_lcs_organ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of skill building
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.085 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.524 NA NA
d_organ_1 ~1 0.440 0.221 0.658 0.854 3.941 0.000
organ_t1 ~1 2.819 2.671 2.966 2.646 37.423 0.000
d_organ_1 ~~ d_organ_1 0.215 0.119 0.312 0.814 4.376 0.000
organ_t1 ~ frequ -0.262 -0.477 -0.047 -0.177 -2.392 0.017
d_organ_1 ~ organ_t1 -0.207 -0.289 -0.125 -0.428 -4.949 0.000
d_organ_1 ~ frequ -0.122 -0.247 0.003 -0.170 -1.907 0.057
frequ ~~ frequ 0.515 0.353 0.678 1.000 6.233 0.000

The moderation effect of the frequency of skill-building behaviors with the organization change score (current-self) is not significantly different from zero, b = -0.122, p = 0.057.

6.6.2.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7698.095 7784.549 0.975 0.053 0.036
# parameters of interest
params_lcs_produ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.044 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.478 NA NA
d_produ_1 ~1 0.352 0.032 0.671 0.995 2.159 0.031
produ_t1 ~1 2.199 1.842 2.556 2.845 12.077 0.000
d_produ_1 ~~ d_produ_1 0.111 0.053 0.169 0.890 3.761 0.000
d_produ_1 ~ produ_t1 -0.122 -0.240 -0.003 -0.266 -2.005 0.045
d_produ_1 ~ sb07_08_t1 -0.029 -0.086 0.028 -0.107 -1.006 0.314
sb07_08_t1 ~~ sb07_08_t1 1.675 1.419 1.932 1.000 12.802 0.000

The moderation effect of the facet-specific change goal with the productiveness change score (current-self) is not significantly different from zero, b = -0.029, p = 0.314.

6.6.2.16 Productiveness - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9316.269 9429.036 0.973 0.049 0.045
# parameters of interest
params_lcs_produ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of skill building
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.045 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.485 NA NA
d_produ_1 ~1 0.374 0.043 0.706 1.068 2.214 0.027
produ_t1 ~1 3.354 3.224 3.484 4.437 50.536 0.000
d_produ_1 ~~ d_produ_1 0.102 0.049 0.156 0.833 3.785 0.000
produ_t1 ~ frequ -0.102 -0.281 0.076 -0.096 -1.124 0.261
d_produ_1 ~ produ_t1 -0.161 -0.261 -0.060 -0.346 -3.140 0.002
d_produ_1 ~ frequ -0.125 -0.219 -0.031 -0.253 -2.605 0.009
frequ ~~ frequ 0.503 0.341 0.664 1.000 6.106 0.000

The frequency of skill-building behaviors significantly moderates changes in productiveness (current-self), b = -0.125, p = 0.009.

6.6.2.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7853.444 7939.898 0.924 0.084 0.081
# parameters of interest
params_lcs_respo_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.998 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.436 NA NA
d_respo_1 ~1 0.375 -0.109 0.858 1.875 1.519 0.129
respo_t1 ~1 4.027 3.854 4.201 8.805 45.582 0.000
d_respo_1 ~~ d_respo_1 0.038 0.004 0.072 0.955 2.193 0.028
d_respo_1 ~ respo_t1 -0.091 -0.207 0.025 -0.209 -1.542 0.123
d_respo_1 ~ sb07_09_t1 0.001 -0.031 0.033 0.010 0.082 0.935
sb07_09_t1 ~~ sb07_09_t1 2.217 2.026 2.409 1.000 22.667 0.000

The moderation effect of the facet-specific change goal with the responsibility change score (current-self) is not significantly different from zero, b = 0.001, p = 0.935.

6.6.2.18 Responsibility - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9375.054 9487.821 0.946 0.063 0.07
# parameters of interest
params_lcs_respo_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of skill building
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.997 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.434 NA NA
d_respo_1 ~1 0.378 0.011 0.744 1.870 2.019 0.043
respo_t1 ~1 3.619 3.517 3.721 7.806 69.636 0.000
d_respo_1 ~~ d_respo_1 0.038 0.004 0.073 0.942 2.177 0.029
respo_t1 ~ frequ -0.019 -0.120 0.082 -0.029 -0.370 0.712
d_respo_1 ~ respo_t1 -0.091 -0.189 0.008 -0.208 -1.797 0.072
d_respo_1 ~ frequ 0.032 -0.034 0.098 0.113 0.951 0.342
frequ ~~ frequ 0.515 0.351 0.678 1.000 6.172 0.000

The moderation effect of the frequency of skill-building behaviors with the responsibility change score (ideal-self) is not significantly different from zero, b = 0.032, p = 0.342.

6.6.2.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 8149.672 8236.127 0.973 0.051 0.044
# parameters of interest
params_lcs_anxie_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.075 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.664 NA NA
d_anxie_1 ~1 1.296 0.606 1.987 2.307 3.680 0.000
anxie_t1 ~1 4.085 3.799 4.370 4.488 28.059 0.000
d_anxie_1 ~~ d_anxie_1 0.256 0.125 0.387 0.811 3.829 0.000
d_anxie_1 ~ anxie_t1 -0.316 -0.475 -0.157 -0.511 -3.889 0.000
d_anxie_1 ~ sb07_10_t1 -0.056 -0.138 0.025 -0.153 -1.351 0.177
sb07_10_t1 ~~ sb07_10_t1 2.317 2.075 2.560 1.000 18.745 0.000

The moderation effect of the facet-specific change goal with the anxiety change score (current-self) is not significantly different from zero, b = -0.056, p = 0.177.

6.6.2.20 Anxiety - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9719.042 9831.809 0.963 0.053 0.052
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of skill building
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.075 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.666 NA NA
d_anxie_1 ~1 0.916 0.561 1.271 1.623 5.057 0.000
anxie_t1 ~1 2.780 2.645 2.915 3.051 40.363 0.000
d_anxie_1 ~~ d_anxie_1 0.261 0.116 0.405 0.817 3.531 0.000
anxie_t1 ~ frequ -0.206 -0.420 0.007 -0.163 -1.897 0.058
d_anxie_1 ~ anxie_t1 -0.251 -0.374 -0.127 -0.405 -3.979 0.000
d_anxie_1 ~ frequ 0.068 -0.082 0.218 0.086 0.883 0.377
frequ ~~ frequ 0.521 0.354 0.687 1.000 6.136 0.000

The moderation effect of the frequency of skill-building behaviors with the anxiety change score (ideal-self) is not significantly different from zero, b = 0.068, p = 0.377.

6.6.2.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7947.811 8034.265 0.963 0.076 0.053
# parameters of interest
params_lcs_depre_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.959 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.546 NA NA
d_depre_1 ~1 0.689 0.100 1.278 1.867 2.291 0.022
depre_t1 ~1 3.887 3.682 4.092 5.992 37.175 0.000
d_depre_1 ~~ d_depre_1 0.130 0.073 0.186 0.952 4.491 0.000
d_depre_1 ~ depre_t1 -0.156 -0.299 -0.013 -0.275 -2.138 0.032
d_depre_1 ~ sb07_11_t1 -0.022 -0.081 0.036 -0.095 -0.741 0.459
sb07_11_t1 ~~ sb07_11_t1 2.510 2.299 2.720 1.000 23.376 0.000

The moderation effect of the facet-specific change goal with the depression change score (current-self) is not significantly different from zero, b = -0.022, p = 0.459.

6.6.2.22 Depression - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9571.153 9683.92 0.951 0.073 0.06
# parameters of interest
params_lcs_depre_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of skill building
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.958 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.546 NA NA
d_depre_1 ~1 0.507 0.268 0.747 1.342 4.149 0.000
depre_t1 ~1 2.931 2.807 3.055 4.424 46.350 0.000
d_depre_1 ~~ d_depre_1 0.137 0.076 0.197 0.956 4.431 0.000
depre_t1 ~ frequ -0.007 -0.152 0.138 -0.008 -0.097 0.923
d_depre_1 ~ depre_t1 -0.118 -0.198 -0.037 -0.206 -2.876 0.004
d_depre_1 ~ frequ 0.021 -0.071 0.113 0.040 0.444 0.657
frequ ~~ frequ 0.514 0.349 0.678 1.000 6.106 0.000

The moderation effect of the frequency of skill-building behaviors with the depression change score (ideal-self) is not significantly different from zero, b = 0.021, p = 0.657.

6.6.2.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 8117.701 8204.155 0.99 0.034 0.031
# parameters of interest
params_lcs_volat_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.072 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.600 NA NA
d_volat_1 ~1 0.539 0.288 0.790 1.084 4.208 0.00
volat_t1 ~1 2.625 2.352 2.898 2.953 18.817 0.00
d_volat_1 ~~ d_volat_1 0.208 0.130 0.285 0.839 5.251 0.00
d_volat_1 ~ volat_t1 -0.207 -0.292 -0.122 -0.370 -4.764 0.00
d_volat_1 ~ sb07_12_t1 -0.028 -0.094 0.039 -0.073 -0.824 0.41
sb07_12_t1 ~~ sb07_12_t1 1.698 1.505 1.890 1.000 17.300 0.00

The moderation effect of the facet-specific change goal with the volatility change score (current-self) is not significantly different from zero, b = -0.028, p = 0.41.

6.6.2.24 Volatility - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9706.076 9818.843 0.973 0.051 0.043
# parameters of interest
params_lcs_volat_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of skill building
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.073 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.600 NA NA
d_volat_1 ~1 0.508 0.257 0.759 1.017 3.969 0.000
volat_t1 ~1 3.257 3.124 3.389 3.650 48.093 0.000
d_volat_1 ~~ d_volat_1 0.208 0.132 0.283 0.833 5.387 0.000
volat_t1 ~ frequ 0.056 -0.139 0.251 0.045 0.565 0.572
d_volat_1 ~ volat_t1 -0.220 -0.295 -0.144 -0.393 -5.694 0.000
d_volat_1 ~ frequ -0.067 -0.194 0.060 -0.096 -1.033 0.302
frequ ~~ frequ 0.507 0.342 0.672 1.000 6.024 0.000

The moderation effect of the frequency of skill-building behaviors with the volatility change score (ideal-self) is significantly different from zero, b = -0.067, p = 0.302.

6.6.2.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7885.907 7972.362 0.968 0.048 0.047
# parameters of interest
params_lcs_curio_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.027 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.349 NA NA
d_curio_1 ~1 0.375 -0.224 0.974 2.213 1.228 0.219
curio_t1 ~1 4.305 4.115 4.495 8.645 44.392 0.000
d_curio_1 ~~ d_curio_1 0.027 -0.018 0.072 0.938 1.178 0.239
d_curio_1 ~ curio_t1 -0.080 -0.209 0.048 -0.236 -1.228 0.219
d_curio_1 ~ sb07_13_t1 0.005 -0.047 0.058 0.040 0.201 0.841
sb07_13_t1 ~~ sb07_13_t1 1.581 1.405 1.757 1.000 17.620 0.000

The moderation effect of the facet-specific change goal with the curiosity change score (current-self) is not significantly different from zero, b = 0.005, p = 0.841.

6.6.2.26 Curiosity - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9459.472 9572.239 0.966 0.046 0.049
# parameters of interest
params_lcs_curio_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of skill building
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.026 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.348 NA NA
d_curio_1 ~1 0.504 0.023 0.984 2.957 2.056 0.040
curio_t1 ~1 4.064 3.967 4.161 8.089 82.153 0.000
d_curio_1 ~~ d_curio_1 0.023 -0.019 0.065 0.793 1.068 0.285
curio_t1 ~ frequ 0.140 0.025 0.255 0.196 2.378 0.017
d_curio_1 ~ curio_t1 -0.109 -0.225 0.008 -0.320 -1.826 0.068
d_curio_1 ~ frequ 0.095 -0.006 0.196 0.392 1.846 0.065
frequ ~~ frequ 0.496 0.334 0.657 1.000 6.015 0.000

The moderation effect of the frequency of skill-building behaviors with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.095, p = 0.065.

6.6.2.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 8171.241 8257.696 0.992 0.029 0.041
# parameters of interest
params_lcs_aesth_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.979 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.510 NA NA
d_aesth_1 ~1 0.340 0.025 0.655 11.956 2.114 0.035
aesth_t1 ~1 2.988 2.867 3.109 54.773 48.359 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.928 4.401 0.000
d_aesth_1 ~ aesth_t1 -0.116 -0.220 -0.011 -0.222 -2.170 0.030
d_aesth_1 ~ sb07_14_t1 0.003 0.000 0.007 0.155 1.885 0.059
sb07_14_t1 ~~ sb07_14_t1 1.863 1.682 2.043 1.000 20.247 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score (current-self) is not significantly different from zero, b = 0.003, p = 0.059.

6.6.2.28 Aesthetic - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9691.47 9804.237 0.986 0.035 0.042
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of skill building
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.979 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.510 NA NA
d_aesth_1 ~1 0.392 0.062 0.723 15.698 2.326 0.020
aesth_t1 ~1 2.990 2.870 3.110 62.434 48.916 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.921 4.426 0.000
aesth_t1 ~ frequ 0.012 0.001 0.023 0.175 2.074 0.038
d_aesth_1 ~ aesth_t1 -0.130 -0.240 -0.020 -0.250 -2.320 0.020
d_aesth_1 ~ frequ 0.006 0.000 0.013 0.180 1.948 0.051
frequ ~~ frequ 0.500 0.340 0.659 1.000 6.129 0.000

The moderation effect of the frequency of skill-building behaviors with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0.006, p = 0.051.

6.6.2.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7762.185 7848.64 0.963 0.06 0.059
# parameters of interest
params_lcs_imagi_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.989 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.495 NA NA
d_imagi_1 ~1 0.327 -0.165 0.820 0.840 1.304 0.192
imagi_t1 ~1 3.932 3.693 4.172 5.053 32.208 0.000
d_imagi_1 ~~ d_imagi_1 0.142 0.059 0.224 0.932 3.375 0.001
d_imagi_1 ~ imagi_t1 -0.100 -0.220 0.020 -0.200 -1.636 0.102
d_imagi_1 ~ sb07_15_t1 0.036 -0.013 0.085 0.130 1.442 0.149
sb07_15_t1 ~~ sb07_15_t1 1.959 1.771 2.148 1.000 20.365 0.000

The moderation effect of the facet-specific change goal with the imagination change score (current-self) is not significantly different from zero, b = 0.036, p = 0.149.

6.6.2.30 Imagination - frequency of skill-building behaviors as moderator of change

Results summary (frequ = frequency of skill-building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 30 9273.626 9386.393 0.979 0.042 0.049
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of skill building
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.990 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.497 NA NA
d_imagi_1 ~1 0.558 0.099 1.018 1.426 2.380 0.017
imagi_t1 ~1 3.550 3.441 3.659 4.550 63.871 0.000
d_imagi_1 ~~ d_imagi_1 0.142 0.061 0.223 0.929 3.443 0.001
imagi_t1 ~ frequ 0.282 0.104 0.461 0.255 3.094 0.002
d_imagi_1 ~ imagi_t1 -0.133 -0.257 -0.009 -0.266 -2.108 0.035
d_imagi_1 ~ frequ 0.077 -0.047 0.200 0.138 1.216 0.224
frequ ~~ frequ 0.495 0.335 0.656 1.000 6.060 0.000

The moderation effect of the frequency of skill-building behaviors with the imagination change score (ideal-self) is not significantly different from zero, b = 0.077, p = 0.224.

6.6.3 Hyp 6: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp6 <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: trait-specific change goals (goals) and frequency of skill-building behaviors (frequency) as moderators on the latent change score

kable(df_table_hyp6[1:10, ], digits = 3)
trait moderator estimate std.all statistic p.value
extraversion goals 0.070 0.138 0.939 0.348
extraversion frequency 0.083 0.177 1.862 0.063
agreeableness goals 0.018 0.072 0.661 0.509
agreeableness frequency 0.088 0.290 2.771 0.006
conscientiousness goals 0.028 0.105 0.949 0.343
conscientiousness frequency 0.093 0.206 2.460 0.014
neuroticism goals 0.071 0.166 1.253 0.210
neuroticism frequency -0.069 -0.099 -1.203 0.229
openness goals 0.106 0.354 2.799 0.005
openness frequency 0.079 0.291 2.167 0.030

Four moderator effects significantly differ from zero:

  • changes in current-level agreeableness are moderated by the frequency of skill-building behaviors
  • changes in current-level conscientiousness are moderated by the frequency of skill-building behaviors
  • changes in current-level openness are moderated by the trait-specific change goals
  • changes in current-level openness are moderated by the frequency of skill-building behaviors

Results summary across the Big Five facets: trait-specific change goals (goals) and frequency of skill-building behaviors (frequency) as moderators on the latent change score

kable(df_table_hyp6[11:40, ], digits = 3)
trait moderator estimate std.all statistic p.value
sociability goals -0.013 -0.030 -0.374 0.708
sociability frequency 0.055 0.074 0.813 0.416
assertiveness goals 0.039 0.221 1.397 0.162
assertiveness frequency 0.058 0.205 1.245 0.213
energy goals 0.003 0.015 0.177 0.860
energy frequency -0.066 -0.185 -1.556 0.120
compassion goals 0.009 0.059 0.360 0.719
compassion frequency 0.114 0.409 2.436 0.015
respectfulness goals 0.031 0.130 1.255 0.209
respectfulness frequency 0.081 0.183 1.982 0.047
trust goals -0.014 -0.055 -0.550 0.583
trust frequency -0.102 -0.226 -1.883 0.060
organization goals -0.019 -0.053 -0.490 0.624
organization frequency -0.122 -0.170 -1.907 0.057
productiveness goals -0.029 -0.107 -1.006 0.314
productiveness frequency -0.125 -0.253 -2.605 0.009
responsibility goals 0.001 0.010 0.082 0.935
responsibility frequency 0.032 0.113 0.951 0.342
anxiety goals -0.056 -0.153 -1.351 0.177
anxiety frequency 0.068 0.086 0.883 0.377
depression goals -0.022 -0.095 -0.741 0.459
depression frequency 0.021 0.040 0.444 0.657
volatility goals -0.028 -0.073 -0.824 0.410
volatility frequency -0.067 -0.096 -1.033 0.302
curiosity goals 0.005 0.040 0.201 0.841
curiosity frequency 0.095 0.392 1.846 0.065
aesthetic goals 0.003 0.155 1.885 0.059
aesthetic frequency 0.006 0.180 1.948 0.051
imagination goals 0.036 0.130 1.442 0.149
imagination frequency 0.077 0.138 1.216 0.224

Looking at the facets, we find five moderator effects that significantly differ from zero:

  • Within agreeableness, we find the effect for the frequency of skill-building behaviors from above represented in the two facets compassion and respectfulness.
  • The effect for conscientiousness is represented in one of the three facets, productiveness.
  • However, the effect seen above for openness is mirrored in none of the facets.

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp6_plot <- df_table_hyp6_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("current", levels = c("current"), labels = c("current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • goals = specific, facet-level change goal(s) as moderator
  • frequency = frequency of skill-building behavior as moderator
Show the code
ggplot(df_table_hyp6_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7 H7: Desire to change and frequency of self-acceptance behaviors as moderators of change in personality in self-acceptance group

Desire to change and frequency of self-acceptance behaviors measured at the follow-up assessment will be positively related to change in ideal-self ratings in the self-acceptance group.

To test this hypothesis, we will estimate the mean-level difference in ideal trait ratings between baseline and follow up using a latent change model for each big five domain and facet. We will then include two moderators. The first will indicate how much the individual wanted to accept themselves on a given big five domain or facet. The second will indicate their frequency of self-acceptance behaviors. We will estimate the main effects of each of these variables and the interaction between these variables on the trait change score.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa_mod <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific acceptance goals
                                  "sa04"))) %>% # frequency self-acceptance behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-acceptance behaviors measured at T2

# colnames(df_sbsa_wide_pers_sa_mod)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa_mod <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa_mod)

6.7.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goals

trait_template_mod_goal_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~ goals               # This estimates the moderation effect on personality at T1
d_trait_1 ~ trait_t1 + goals   # This estimates the self-feedback parameter and the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), trait_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

trait_template_mod_frequ_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~ frequ               # This estimates the moderation effect on personality at T1
d_trait_1 ~ trait_t1 + frequ   # This estimates the self-feedback parameter and the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), trait_model_fit))
}  
6.7.1.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5704.159 5800.63 0.954 0.059 0.048
# parameters of interest
params_lcs_extra_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.049 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.786 NA NA
d_extra_1 ~1 1.212 0.686 1.737 4.651 4.514 0.000
extra_t1 ~1 3.843 3.777 3.909 11.052 114.075 0.000
d_extra_1 ~~ d_extra_1 0.053 0.023 0.083 0.783 3.490 0.000
extra_t1 ~ goals 0.012 -0.069 0.092 0.028 0.287 0.774
d_extra_1 ~ extra_t1 -0.323 -0.459 -0.187 -0.431 -4.657 0.000
d_extra_1 ~ goals -0.051 -0.118 0.015 -0.164 -1.515 0.130
goals ~~ goals 0.696 0.321 1.071 1.000 3.641 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (ideal-self) is not significantly different from zero, b = -0.051, p = 0.13.

6.7.1.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5318.86 5415.331 1 0 0.033
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of skill building
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.046 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.786 NA NA
d_extra_1 ~1 1.294 0.731 1.857 4.895 4.504 0.000
extra_t1 ~1 3.843 3.777 3.909 10.922 113.877 0.000
d_extra_1 ~~ d_extra_1 0.056 0.027 0.085 0.801 3.798 0.000
extra_t1 ~ frequ 0.108 0.035 0.181 0.237 2.904 0.004
d_extra_1 ~ extra_t1 -0.344 -0.490 -0.199 -0.459 -4.635 0.000
d_extra_1 ~ frequ 0.037 -0.025 0.098 0.108 1.176 0.240
frequ ~~ frequ 0.594 0.407 0.781 1.000 6.216 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.037, p = 0.24.

6.7.1.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5767.942 5864.413 1 0 0.03
# parameters of interest
params_lcs_agree_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.954 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.617 NA NA
d_agree_1 ~1 0.596 0.181 1.011 2.020 2.813 0.005
agree_t1 ~1 3.936 3.861 4.011 8.625 103.268 0.000
d_agree_1 ~~ d_agree_1 0.081 0.044 0.119 0.936 4.297 0.000
agree_t1 ~ goals 0.000 -0.089 0.089 0.000 -0.002 0.998
d_agree_1 ~ agree_t1 -0.160 -0.262 -0.057 -0.247 -3.050 0.002
d_agree_1 ~ goals -0.020 -0.093 0.052 -0.055 -0.549 0.583
goals ~~ goals 0.633 0.332 0.934 1.000 4.122 0.000

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (ideal-self) is not significantly different from zero, b = -0.02, p = 0.583.

6.7.1.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5514.666 5611.137 1 0 0.032
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of skill building
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.953 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.617 NA NA
d_agree_1 ~1 0.703 0.225 1.181 2.403 2.882 0.004
agree_t1 ~1 3.936 3.861 4.011 8.709 103.353 0.000
d_agree_1 ~~ d_agree_1 0.079 0.044 0.114 0.922 4.367 0.000
agree_t1 ~ frequ 0.178 0.093 0.263 0.306 4.084 0.000
d_agree_1 ~ agree_t1 -0.187 -0.306 -0.068 -0.289 -3.088 0.002
d_agree_1 ~ frequ 0.053 -0.024 0.131 0.141 1.345 0.178
frequ ~~ frequ 0.602 0.419 0.786 1.000 6.435 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (ideal-self) is not significantly different from zero, b = 0.053, p = 0.178.

6.7.1.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5207.128 5303.599 0.986 0.041 0.036
# parameters of interest
params_lcs_consc_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.980 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.747 NA NA
d_consc_1 ~1 1.240 0.509 1.970 3.986 3.327 0.001
consc_t1 ~1 4.392 4.335 4.449 10.755 151.561 0.000
d_consc_1 ~~ d_consc_1 0.084 0.054 0.114 0.865 5.431 0.000
consc_t1 ~ goals -0.040 -0.091 0.011 -0.112 -1.526 0.127
d_consc_1 ~ consc_t1 -0.278 -0.440 -0.116 -0.365 -3.371 0.001
d_consc_1 ~ goals -0.026 -0.067 0.016 -0.096 -1.218 0.223
goals ~~ goals 1.323 0.991 1.656 1.000 7.801 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (ideal-self) is not significantly different from zero, b = -0.026, p = 0.223.

6.7.1.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 4900.903 4997.374 0.991 0.032 0.036
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of skill building
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.979 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.743 NA NA
d_consc_1 ~1 1.352 0.548 2.156 4.317 3.296 0.001
consc_t1 ~1 4.392 4.335 4.449 10.640 151.452 0.000
d_consc_1 ~~ d_consc_1 0.084 0.054 0.113 0.854 5.543 0.000
consc_t1 ~ frequ 0.167 0.079 0.255 0.309 3.707 0.000
d_consc_1 ~ consc_t1 -0.304 -0.482 -0.125 -0.400 -3.333 0.001
d_consc_1 ~ frequ 0.064 -0.015 0.143 0.157 1.595 0.111
frequ ~~ frequ 0.583 0.396 0.770 1.000 6.112 0.000

The moderation effect of frequency of self-acceptance behaviors with the conscientiousness change score (ideal-self) is not significantly different from zero, b = 0.064, p = 0.111.

6.7.1.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5529.444 5625.915 0.964 0.056 0.048
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.897 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.771 NA NA
d_neuro_1 ~1 0.423 0.148 0.697 1.296 3.016 0.003
neuro_t1 ~1 1.657 1.602 1.713 4.369 58.301 0.000
d_neuro_1 ~~ d_neuro_1 0.094 0.056 0.133 0.885 4.808 0.000
neuro_t1 ~ goals -0.006 -0.070 0.057 -0.013 -0.193 0.847
d_neuro_1 ~ neuro_t1 -0.246 -0.418 -0.074 -0.286 -2.804 0.005
d_neuro_1 ~ goals 0.073 -0.014 0.160 0.178 1.649 0.099
goals ~~ goals 0.634 0.146 1.121 1.000 2.549 0.011

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (ideal-self) is not significantly different from zero, b = 0.073, p = 0.099.

6.7.1.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5207.826 5304.297 0.997 0.016 0.034
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of skill building
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.898 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.771 NA NA
d_neuro_1 ~1 0.456 0.170 0.742 1.415 3.125 0.002
neuro_t1 ~1 1.658 1.602 1.714 4.414 58.286 0.000
d_neuro_1 ~~ d_neuro_1 0.094 0.057 0.131 0.903 4.930 0.000
neuro_t1 ~ frequ -0.087 -0.166 -0.009 -0.180 -2.177 0.029
d_neuro_1 ~ neuro_t1 -0.267 -0.446 -0.088 -0.311 -2.918 0.004
d_neuro_1 ~ frequ -0.049 -0.123 0.024 -0.118 -1.321 0.187
frequ ~~ frequ 0.598 0.408 0.788 1.000 6.180 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (ideal-self) is not significantly different from zero, b = -0.049, p = 0.187.

6.7.1.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5531.677 5628.148 1 0 0.028
# parameters of interest
params_lcs_openn_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.954 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.669 NA NA
d_openn_1 ~1 0.743 0.192 1.293 2.660 2.643 0.008
openn_t1 ~1 3.897 3.831 3.963 9.796 115.380 0.000
d_openn_1 ~~ d_openn_1 0.072 0.039 0.104 0.921 4.328 0.000
openn_t1 ~ goals -0.082 -0.165 0.001 -0.148 -1.932 0.053
d_openn_1 ~ openn_t1 -0.197 -0.333 -0.060 -0.280 -2.820 0.005
d_openn_1 ~ goals 0.000 -0.067 0.067 0.000 -0.001 1.000
goals ~~ goals 0.519 0.293 0.746 1.000 4.499 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score (ideal-self) is not significantly different from zero, b = 0, p = 1.

6.7.1.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of skill building behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 26 5373.969 5470.44 1 0 0.03
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of skill building
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.953 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.669 NA NA
d_openn_1 ~1 0.788 0.210 1.366 2.832 2.673 0.008
openn_t1 ~1 3.897 3.831 3.963 9.829 115.434 0.000
d_openn_1 ~~ d_openn_1 0.071 0.039 0.103 0.918 4.357 0.000
openn_t1 ~ frequ 0.142 0.062 0.222 0.281 3.465 0.001
d_openn_1 ~ openn_t1 -0.208 -0.352 -0.064 -0.297 -2.838 0.005
d_openn_1 ~ frequ 0.022 -0.046 0.089 0.061 0.628 0.530
frequ ~~ frequ 0.617 0.429 0.804 1.000 6.447 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score (ideal-self) is not significantly different from zero, b = 0.022, p = 0.53.

6.7.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_mod_goal_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~ ind_goal               # This estimates the moderation effect on personality at T1
d_facet_1 ~ facet_t1 + ind_goal   # This estimates the self-feedback parameter and the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), facet_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

facet_template_mod_frequ_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~ frequ               # This estimates the moderation effect on personality at T1
d_facet_1 ~ facet_t1 + frequ   # This estimates the self-feedback parameter and the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), facet_model_fit))
}  
6.7.2.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7401.301 7486.641 0.929 0.062 0.056
# parameters of interest
params_lcs_socia_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.998 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.691 NA NA
d_socia_1 ~1 1.012 0.252 1.772 3.846 2.611 0.009
socia_t1 ~1 4.185 3.994 4.375 11.002 43.117 0.000
d_socia_1 ~~ d_socia_1 0.059 0.009 0.110 0.858 2.312 0.021
d_socia_1 ~ socia_t1 -0.222 -0.412 -0.032 -0.321 -2.291 0.022
d_socia_1 ~ sa07_01_t1 -0.030 -0.079 0.019 -0.156 -1.195 0.232
sa07_01_t1 ~~ sa07_01_t1 1.866 1.657 2.075 1.000 17.476 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score (ideal-self) is not significantly different from zero, b = -0.03, p = 0.232.

6.7.2.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 9018.396 9129.708 0.959 0.045 0.053
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of skill building
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.001 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.701 NA NA
d_socia_1 ~1 1.020 0.196 1.844 3.950 2.427 0.015
socia_t1 ~1 4.318 4.241 4.394 11.707 110.092 0.000
d_socia_1 ~~ d_socia_1 0.058 0.008 0.109 0.876 2.258 0.024
socia_t1 ~ frequ 0.002 -0.083 0.086 0.004 0.039 0.969
d_socia_1 ~ socia_t1 -0.246 -0.434 -0.058 -0.352 -2.569 0.010
d_socia_1 ~ frequ -0.002 -0.072 0.068 -0.005 -0.051 0.959
frequ ~~ frequ 0.600 0.411 0.789 1.000 6.219 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (ideal-self) is not significantly different from zero, b = -0.002, p = 0.959.

6.7.2.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7619.02 7704.36 0.971 0.037 0.046
# parameters of interest
params_lcs_asser_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.012 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.720 NA NA
d_asser_1 ~1 1.090 0.324 1.857 5.428 2.788 0.005
asser_t1 ~1 4.088 3.944 4.231 14.487 55.901 0.000
d_asser_1 ~~ d_asser_1 0.034 0.003 0.066 0.852 2.155 0.031
d_asser_1 ~ asser_t1 -0.258 -0.443 -0.074 -0.363 -2.748 0.006
d_asser_1 ~ sa07_02_t1 -0.014 -0.040 0.012 -0.098 -1.083 0.279
sa07_02_t1 ~~ sa07_02_t1 1.876 1.675 2.076 1.000 18.353 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (ideal-self) is not significantly different from zero, b = -0.014, p = 0.279.

6.7.2.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 9215.153 9326.466 0.993 0.019 0.041
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of skill building
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.014 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.722 NA NA
d_asser_1 ~1 1.234 0.437 2.030 6.000 3.034 0.002
asser_t1 ~1 4.148 4.052 4.244 14.368 84.467 0.000
d_asser_1 ~~ d_asser_1 0.035 0.004 0.065 0.818 2.212 0.027
asser_t1 ~ frequ 0.093 0.011 0.174 0.246 2.231 0.026
d_asser_1 ~ asser_t1 -0.304 -0.493 -0.114 -0.427 -3.141 0.002
d_asser_1 ~ frequ 0.056 -0.006 0.118 0.208 1.769 0.077
frequ ~~ frequ 0.585 0.400 0.770 1.000 6.186 0.000

The moderation effect of the frequency of self-acceptance behaviors with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.056, p = 0.077.

6.7.2.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6953.933 7039.273 0.953 0.038 0.048
# parameters of interest
params_lcs_energ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.089 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.745 NA NA
d_energ_1 ~1 0.701 0.242 1.160 6.455 2.991 0.003
energ_t1 ~1 2.433 2.302 2.564 15.333 36.491 0.000
d_energ_1 ~~ d_energ_1 0.009 -0.014 0.032 0.778 0.774 0.439
d_energ_1 ~ energ_t1 -0.305 -0.497 -0.112 -0.445 -3.099 0.002
d_energ_1 ~ sa07_03_t1 0.009 -0.010 0.028 0.116 0.908 0.364
sa07_03_t1 ~~ sa07_03_t1 1.949 1.744 2.153 1.000 18.643 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score (ideal-self) is not significantly different from zero, b = 0.009, p = 0.364.

6.7.2.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 8529.092 8640.404 0.967 0.035 0.051
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of skill building
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.060 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.743 NA NA
d_energ_1 ~1 0.817 0.283 1.351 7.029 2.998 0.003
energ_t1 ~1 2.395 2.273 2.516 14.453 38.632 0.000
d_energ_1 ~~ d_energ_1 0.011 -0.013 0.034 0.798 0.907 0.364
energ_t1 ~ frequ -0.084 -0.173 0.005 -0.390 -1.855 0.064
d_energ_1 ~ energ_t1 -0.341 -0.565 -0.117 -0.486 -2.981 0.003
d_energ_1 ~ frequ -0.022 -0.070 0.026 -0.147 -0.902 0.367
frequ ~~ frequ 0.592 0.410 0.774 1.000 6.368 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (ideal-self) is not significantly different from zero, b = -0.022, p = 0.367.

6.7.2.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7874.185 7959.525 1 0 0.033
# parameters of interest
params_lcs_compa_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.941 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.569 NA NA
d_compa_1 ~1 0.529 -0.450 1.508 1.482 1.059 0.290
compa_t1 ~1 4.306 4.133 4.478 7.300 48.964 0.000
d_compa_1 ~~ d_compa_1 0.120 0.002 0.238 0.943 1.990 0.047
d_compa_1 ~ compa_t1 -0.119 -0.334 0.095 -0.197 -1.093 0.274
d_compa_1 ~ sa07_04_t1 -0.037 -0.097 0.022 -0.138 -1.238 0.216
sa07_04_t1 ~~ sa07_04_t1 1.729 1.536 1.923 1.000 17.554 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score (ideal-self) is not significantly different from zero, b = -0.037, p = 0.216.

6.7.2.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 9488.092 9599.405 0.98 0.03 0.052
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of skill building
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.938 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.571 NA NA
d_compa_1 ~1 0.356 -0.726 1.438 0.973 0.644 0.519
compa_t1 ~1 4.293 4.199 4.388 7.145 89.151 0.000
d_compa_1 ~~ d_compa_1 0.128 -0.001 0.258 0.958 1.940 0.052
compa_t1 ~ frequ 0.293 0.163 0.423 0.375 4.404 0.000
d_compa_1 ~ compa_t1 -0.100 -0.345 0.145 -0.165 -0.802 0.423
d_compa_1 ~ frequ -0.036 -0.193 0.121 -0.075 -0.447 0.655
frequ ~~ frequ 0.593 0.411 0.775 1.000 6.383 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (ideal-self) is not significantly different from zero, b = -0.036, p = 0.655.

6.7.2.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6317.585 6402.924 0.982 0.031 0.045
# parameters of interest
params_lcs_respe_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.871 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.564 NA NA
d_respe_1 ~1 0.262 -0.600 1.123 1.308 0.595 0.552
respe_t1 ~1 4.760 4.679 4.841 15.411 115.183 0.000
d_respe_1 ~~ d_respe_1 0.040 0.010 0.069 0.991 2.651 0.008
d_respe_1 ~ respe_t1 -0.055 -0.233 0.122 -0.085 -0.610 0.542
d_respe_1 ~ sa07_05_t1 -0.008 -0.042 0.026 -0.052 -0.470 0.639
sa07_05_t1 ~~ sa07_05_t1 1.673 1.379 1.968 1.000 11.142 0.000

The moderation effect of the facet-specific acceptance goal with the respectfulness change score (ideal-self) is not significantly different from zero, b = -0.008, p = 0.639.

6.7.2.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 7934.6 8045.913 0.987 0.026 0.041
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of skill building
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.870 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.564 NA NA
d_respe_1 ~1 0.347 -0.623 1.316 1.717 0.701 0.484
respe_t1 ~1 4.703 4.645 4.760 15.095 161.204 0.000
d_respe_1 ~~ d_respe_1 0.040 0.011 0.069 0.985 2.676 0.007
respe_t1 ~ frequ 0.160 0.092 0.228 0.393 4.641 0.000
d_respe_1 ~ respe_t1 -0.077 -0.280 0.127 -0.118 -0.738 0.461
d_respe_1 ~ frequ 0.028 -0.042 0.098 0.106 0.781 0.435
frequ ~~ frequ 0.585 0.404 0.766 1.000 6.329 0.000

The moderation effect of the frequency of self-acceptance behaviors with the respectfulness change score (ideal-self) is not significantly different from zero, b = 0.028, p = 0.435.

6.7.2.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7651.257 7736.597 0.984 0.029 0.039
# parameters of interest
params_lcs_trust_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.981 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.659 NA NA
d_trust_1 ~1 0.347 0.009 0.684 1.287 2.014 0.044
trust_t1 ~1 1.993 1.852 2.133 4.963 27.855 0.000
d_trust_1 ~~ d_trust_1 0.065 0.019 0.111 0.890 2.754 0.006
d_trust_1 ~ trust_t1 -0.196 -0.355 -0.037 -0.293 -2.418 0.016
d_trust_1 ~ sa07_06_t1 0.024 -0.012 0.060 0.125 1.298 0.194
sa07_06_t1 ~~ sa07_06_t1 1.987 1.779 2.196 1.000 18.705 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score (ideal-self) is not significantly different from zero, b = 0.024, p = 0.194.

6.7.2.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 9228.741 9340.054 0.961 0.045 0.052
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of skill building
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.990 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.663 NA NA
d_trust_1 ~1 0.511 0.171 0.851 1.854 2.945 0.003
trust_t1 ~1 1.908 1.809 2.007 4.632 37.859 0.000
d_trust_1 ~~ d_trust_1 0.065 0.021 0.110 0.862 2.868 0.004
trust_t1 ~ frequ -0.147 -0.246 -0.047 -0.276 -2.876 0.004
d_trust_1 ~ trust_t1 -0.251 -0.427 -0.074 -0.375 -2.779 0.005
d_trust_1 ~ frequ -0.070 -0.159 0.019 -0.197 -1.537 0.124
frequ ~~ frequ 0.603 0.416 0.789 1.000 6.335 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (ideal-self) is not significantly different from zero, b = -0.07, p = 0.124.

6.7.2.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6540.816 6626.155 0.937 0.051 0.048
# parameters of interest
params_lcs_organ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.010 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.791 NA NA
d_organ_1 ~1 0.518 0.072 0.963 2.251 2.277 0.023
organ_t1 ~1 1.595 1.458 1.733 5.435 22.732 0.000
d_organ_1 ~~ d_organ_1 0.044 0.002 0.086 0.831 2.048 0.041
d_organ_1 ~ organ_t1 -0.326 -0.620 -0.031 -0.416 -2.165 0.030
d_organ_1 ~ sa07_07_t1 0.011 -0.018 0.040 0.073 0.735 0.462
sa07_07_t1 ~~ sa07_07_t1 2.345 2.152 2.537 1.000 23.855 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score (ideal-self) is not significantly different from zero, b = 0.011, p = 0.462.

6.7.2.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 8053.043 8164.356 0.973 0.035 0.045
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of skill building
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.020 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.802 NA NA
d_organ_1 ~1 0.701 0.220 1.183 3.371 2.854 0.004
organ_t1 ~1 1.682 1.591 1.773 6.356 36.129 0.000
d_organ_1 ~~ d_organ_1 0.031 -0.001 0.064 0.727 1.902 0.057
organ_t1 ~ frequ -0.117 -0.187 -0.048 -0.335 -3.312 0.001
d_organ_1 ~ organ_t1 -0.416 -0.707 -0.125 -0.530 -2.806 0.005
d_organ_1 ~ frequ -0.091 -0.169 -0.014 -0.333 -2.323 0.020
frequ ~~ frequ 0.574 0.394 0.754 1.000 6.244 0.000

The frequency of self-acceptance behaviors significantly moderates changes in organization (ideal-self), b = -0.091, p = 0.02.

6.7.2.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6115.106 6200.445 0.862 0.07 0.065
# parameters of interest
params_lcs_produ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.959 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.634 NA NA
d_produ_1 ~1 0.272 -0.137 0.681 1.316 1.304 0.192
produ_t1 ~1 1.546 1.429 1.663 4.944 25.804 0.000
d_produ_1 ~~ d_produ_1 0.040 0.005 0.075 0.928 2.223 0.026
d_produ_1 ~ produ_t1 -0.173 -0.441 0.095 -0.262 -1.267 0.205
d_produ_1 ~ sa07_08_t1 -0.006 -0.032 0.020 -0.043 -0.450 0.653
sa07_08_t1 ~~ sa07_08_t1 2.121 1.919 2.323 1.000 20.591 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score (ideal-self) is not significantly different from zero, b = -0.006, p = 0.653.

6.7.2.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 7673.702 7785.015 0.948 0.045 0.056
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of skill building
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.954 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.631 NA NA
d_produ_1 ~1 0.302 -0.114 0.717 1.476 1.421 0.155
produ_t1 ~1 1.592 1.514 1.669 5.150 40.237 0.000
d_produ_1 ~~ d_produ_1 0.037 0.005 0.069 0.884 2.267 0.023
produ_t1 ~ frequ -0.090 -0.159 -0.021 -0.226 -2.551 0.011
d_produ_1 ~ produ_t1 -0.204 -0.479 0.071 -0.308 -1.451 0.147
d_produ_1 ~ frequ -0.061 -0.134 0.013 -0.230 -1.620 0.105
frequ ~~ frequ 0.599 0.410 0.788 1.000 6.199 0.000

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score (ideal-self) is not significantly different from zero, b = -0.061, p = 0.105.

6.7.2.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6991.791 7077.131 0.995 0.015 0.04
# parameters of interest
params_lcs_respo_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.983 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.724 NA NA
d_respo_1 ~1 1.174 0.379 1.968 3.260 2.896 0.004
respo_t1 ~1 4.344 4.170 4.517 8.884 49.032 0.000
d_respo_1 ~~ d_respo_1 0.114 0.041 0.187 0.877 3.050 0.002
d_respo_1 ~ respo_t1 -0.258 -0.431 -0.084 -0.350 -2.915 0.004
d_respo_1 ~ sa07_09_t1 -0.017 -0.061 0.028 -0.067 -0.728 0.467
sa07_09_t1 ~~ sa07_09_t1 2.111 1.903 2.319 1.000 19.927 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.017, p = 0.467.

6.7.2.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 8550.712 8662.025 0.977 0.033 0.047
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of skill building
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.982 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.721 NA NA
d_respo_1 ~1 1.218 0.391 2.045 3.361 2.887 0.004
respo_t1 ~1 4.271 4.162 4.380 8.657 76.717 0.000
d_respo_1 ~~ d_respo_1 0.114 0.043 0.186 0.872 3.128 0.002
respo_t1 ~ frequ 0.213 0.085 0.340 0.329 3.278 0.001
d_respo_1 ~ respo_t1 -0.278 -0.468 -0.089 -0.379 -2.876 0.004
d_respo_1 ~ frequ 0.053 -0.055 0.161 0.112 0.965 0.335
frequ ~~ frequ 0.583 0.394 0.771 1.000 6.049 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (ideal-self) is not significantly different from zero, b = 0.053, p = 0.335.

6.7.2.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7620.813 7706.152 0.873 0.05 0.05
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.813 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.873 NA NA
d_anxie_1 ~1 1.418 -0.800 3.635 4.604 1.253 0.210
anxie_t1 ~1 4.573 4.440 4.706 15.934 67.420 0.000
d_anxie_1 ~~ d_anxie_1 0.086 -0.019 0.191 0.911 1.614 0.107
d_anxie_1 ~ anxie_t1 -0.320 -0.789 0.148 -0.299 -1.341 0.180
d_anxie_1 ~ sa07_10_t1 0.004 -0.050 0.058 0.019 0.143 0.886
sa07_10_t1 ~~ sa07_10_t1 2.097 1.899 2.295 1.000 20.800 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score (ideal-self) is not significantly different from zero, b = 0.004, p = 0.886.

6.7.2.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 9186.786 9298.099 0.924 0.048 0.058
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of skill building
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.812 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.843 NA NA
d_anxie_1 ~1 1.339 -0.970 3.649 4.220 1.137 0.256
anxie_t1 ~1 4.585 4.519 4.651 14.997 135.436 0.000
d_anxie_1 ~~ d_anxie_1 0.093 -0.024 0.210 0.923 1.555 0.120
anxie_t1 ~ frequ 0.126 0.024 0.228 0.321 2.421 0.015
d_anxie_1 ~ anxie_t1 -0.302 -0.798 0.195 -0.290 -1.190 0.234
d_anxie_1 ~ frequ 0.026 -0.089 0.141 0.063 0.439 0.661
frequ ~~ frequ 0.604 0.415 0.793 1.000 6.273 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (ideal-self) is not significantly different from zero, b = 0.026, p = 0.661.

6.7.2.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6285.706 6371.046 0.896 0.067 0.066
# parameters of interest
params_lcs_depre_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.921 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.538 NA NA
d_depre_1 ~1 0.356 -0.958 1.669 2.650 0.531 0.596
depre_t1 ~1 4.483 4.390 4.576 19.519 94.355 0.000
d_depre_1 ~~ d_depre_1 0.018 -0.007 0.042 0.981 1.401 0.161
d_depre_1 ~ depre_t1 -0.080 -0.367 0.206 -0.138 -0.551 0.582
d_depre_1 ~ sa07_11_t1 0.001 -0.022 0.024 0.008 0.062 0.950
sa07_11_t1 ~~ sa07_11_t1 2.223 2.029 2.417 1.000 22.481 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score (ideal-self) is not significantly different from zero, b = 0.001, p = 0.95.

6.7.2.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 7847.38 7958.693 0.91 0.064 0.067
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of skill building
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.918 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.540 NA NA
d_depre_1 ~1 0.384 -0.847 1.615 2.777 0.612 0.541
depre_t1 ~1 4.410 4.345 4.476 18.738 132.496 0.000
d_depre_1 ~~ d_depre_1 0.018 -0.008 0.044 0.955 1.384 0.166
depre_t1 ~ frequ 0.022 -0.035 0.079 0.072 0.749 0.454
d_depre_1 ~ depre_t1 -0.086 -0.362 0.189 -0.147 -0.614 0.539
d_depre_1 ~ frequ 0.029 -0.017 0.076 0.165 1.244 0.214
frequ ~~ frequ 0.606 0.413 0.798 1.000 6.165 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (ideal-self) is not significantly different from zero, b = 0.029, p = 0.214.

6.7.2.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7075.037 7160.377 0.931 0.049 0.051
# parameters of interest
params_lcs_volat_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.834 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.691 NA NA
d_volat_1 ~1 0.274 -0.196 0.743 0.782 1.143 0.253
volat_t1 ~1 1.701 1.528 1.873 4.027 19.331 0.000
d_volat_1 ~~ d_volat_1 0.120 0.029 0.210 0.977 2.591 0.010
d_volat_1 ~ volat_t1 -0.124 -0.387 0.138 -0.150 -0.928 0.353
d_volat_1 ~ sa07_12_t1 -0.008 -0.059 0.043 -0.029 -0.305 0.761
sa07_12_t1 ~~ sa07_12_t1 1.655 1.466 1.843 1.000 17.206 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score (ideal-self) is not significantly different from zero, b = -0.008, p = 0.761.

6.7.2.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 8709.639 8820.952 0.964 0.038 0.052
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of skill building
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.841 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.683 NA NA
d_volat_1 ~1 0.302 -0.135 0.738 0.936 1.354 0.176
volat_t1 ~1 1.686 1.604 1.769 4.247 40.193 0.000
d_volat_1 ~~ d_volat_1 0.099 0.023 0.174 0.949 2.548 0.011
volat_t1 ~ frequ -0.124 -0.213 -0.034 -0.237 -2.697 0.007
d_volat_1 ~ volat_t1 -0.156 -0.421 0.110 -0.192 -1.149 0.251
d_volat_1 ~ frequ -0.073 -0.172 0.025 -0.173 -1.456 0.145
frequ ~~ frequ 0.582 0.394 0.769 1.000 6.076 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (ideal-self) is significantly different from zero, b = -0.073, p = 0.145.

6.7.2.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7453.397 7538.737 0.995 0.014 0.037
# parameters of interest
params_lcs_curio_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.978 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.623 NA NA
d_curio_1 ~1 0.943 -0.070 1.957 4.726 1.824 0.068
curio_t1 ~1 4.617 4.508 4.726 14.731 82.941 0.000
d_curio_1 ~~ d_curio_1 0.036 -0.007 0.079 0.899 1.629 0.103
d_curio_1 ~ curio_t1 -0.198 -0.419 0.023 -0.311 -1.758 0.079
d_curio_1 ~ sa07_13_t1 -0.022 -0.062 0.017 -0.148 -1.098 0.272
sa07_13_t1 ~~ sa07_13_t1 1.786 1.550 2.023 1.000 14.799 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score (ideal-self) is not significantly different from zero, b = -0.022, p = 0.272.

6.7.2.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 9082.267 9193.58 0.981 0.028 0.047
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of skill building
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.975 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.625 NA NA
d_curio_1 ~1 0.841 -0.211 1.892 4.156 1.567 0.117
curio_t1 ~1 4.518 4.448 4.588 14.312 126.371 0.000
d_curio_1 ~~ d_curio_1 0.038 -0.007 0.082 0.918 1.648 0.099
curio_t1 ~ frequ 0.075 -0.008 0.158 0.186 1.765 0.078
d_curio_1 ~ curio_t1 -0.186 -0.416 0.044 -0.291 -1.588 0.112
d_curio_1 ~ frequ 0.016 -0.061 0.092 0.061 0.398 0.691
frequ ~~ frequ 0.618 0.425 0.812 1.000 6.256 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.016, p = 0.691.

6.7.2.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7519.34 7604.68 0.988 0.032 0.042
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.952 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.655 NA NA
d_aesth_1 ~1 0.582 0.122 1.041 12.860 2.482 0.013
aesth_t1 ~1 3.152 3.018 3.287 47.968 45.956 0.000
d_aesth_1 ~~ d_aesth_1 0.002 -0.006 0.010 0.913 0.440 0.660
d_aesth_1 ~ aesth_t1 -0.182 -0.325 -0.039 -0.264 -2.498 0.012
d_aesth_1 ~ sa07_14_t1 -0.004 -0.014 0.006 -0.120 -0.781 0.435
sa07_14_t1 ~~ sa07_14_t1 1.877 1.681 2.073 1.000 18.765 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (ideal-self) is not significantly different from zero, b = -0.004, p = 0.435.

6.7.2.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 9113.488 9224.801 0.986 0.032 0.047
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of skill building
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.952 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.655 NA NA
d_aesth_1 ~1 0.677 0.177 1.177 15.339 2.656 0.008
aesth_t1 ~1 3.157 3.020 3.294 49.219 45.205 0.000
d_aesth_1 ~~ d_aesth_1 0.002 -0.006 0.010 0.894 0.433 0.665
aesth_t1 ~ frequ 0.020 -0.025 0.064 0.235 0.863 0.388
d_aesth_1 ~ aesth_t1 -0.215 -0.371 -0.060 -0.313 -2.712 0.007
d_aesth_1 ~ frequ 0.011 -0.015 0.037 0.191 0.826 0.409
frequ ~~ frequ 0.593 0.408 0.778 1.000 6.282 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0.011, p = 0.409.

6.7.2.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7012.38 7097.72 0.974 0.029 0.05
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.912 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.606 NA NA
d_imagi_1 ~1 0.492 -0.795 1.780 2.189 0.750 0.453
imagi_t1 ~1 4.670 4.556 4.783 13.800 80.799 0.000
d_imagi_1 ~~ d_imagi_1 0.049 0.009 0.089 0.966 2.404 0.016
d_imagi_1 ~ imagi_t1 -0.117 -0.387 0.154 -0.176 -0.846 0.398
d_imagi_1 ~ sa07_15_t1 0.006 -0.027 0.040 0.041 0.375 0.708
sa07_15_t1 ~~ sa07_15_t1 2.087 1.891 2.283 1.000 20.904 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score (ideal-self) is not significantly different from zero, b = 0.006, p = 0.708.

6.7.2.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 30 8580.065 8691.378 0.964 0.038 0.053
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of skill building
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.907 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.609 NA NA
d_imagi_1 ~1 0.465 -0.956 1.886 1.959 0.641 0.522
imagi_t1 ~1 4.608 4.544 4.673 13.032 139.800 0.000
d_imagi_1 ~~ d_imagi_1 0.054 0.009 0.100 0.967 2.357 0.018
imagi_t1 ~ frequ 0.139 0.030 0.247 0.300 2.503 0.012
d_imagi_1 ~ imagi_t1 -0.107 -0.411 0.196 -0.160 -0.694 0.488
d_imagi_1 ~ frequ -0.016 -0.112 0.079 -0.052 -0.331 0.741
frequ ~~ frequ 0.584 0.392 0.777 1.000 5.949 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (ideal-self) is not significantly different from zero, b = -0.016, p = 0.741.

6.7.3 Hyp 7: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp7 <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score

kable(df_table_hyp7[1:10, ], digits = 3)
trait moderator estimate std.all statistic p.value
extraversion goals -0.051 -0.164 -1.515 0.130
extraversion frequency 0.037 0.108 1.176 0.240
agreeableness goals -0.020 -0.055 -0.549 0.583
agreeableness frequency 0.053 0.141 1.345 0.178
conscientiousness goals -0.026 -0.096 -1.218 0.223
conscientiousness frequency 0.064 0.157 1.595 0.111
neuroticism goals 0.073 0.178 1.649 0.099
neuroticism frequency -0.049 -0.118 -1.321 0.187
openness goals 0.000 0.000 -0.001 1.000
openness frequency 0.022 0.061 0.628 0.530

No moderator effects that significantly differ from zero.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score

kable(df_table_hyp7[11:40, ], digits = 3)
trait moderator estimate std.all statistic p.value
sociability goals -0.030 -0.156 -1.195 0.232
sociability frequency -0.002 -0.005 -0.051 0.959
assertiveness goals -0.014 -0.098 -1.083 0.279
assertiveness frequency 0.056 0.208 1.769 0.077
energy goals 0.009 0.116 0.908 0.364
energy frequency -0.022 -0.147 -0.902 0.367
compassion goals -0.037 -0.138 -1.238 0.216
compassion frequency -0.036 -0.075 -0.447 0.655
respectfulness goals -0.008 -0.052 -0.470 0.639
respectfulness frequency 0.028 0.106 0.781 0.435
trust goals 0.024 0.125 1.298 0.194
trust frequency -0.070 -0.197 -1.537 0.124
organization goals 0.011 0.073 0.735 0.462
organization frequency -0.091 -0.333 -2.323 0.020
productiveness goals -0.006 -0.043 -0.450 0.653
productiveness frequency -0.061 -0.230 -1.620 0.105
responsibility goals -0.017 -0.067 -0.728 0.467
responsibility frequency 0.053 0.112 0.965 0.335
anxiety goals 0.004 0.019 0.143 0.886
anxiety frequency 0.026 0.063 0.439 0.661
depression goals 0.001 0.008 0.062 0.950
depression frequency 0.029 0.165 1.244 0.214
volatility goals -0.008 -0.029 -0.305 0.761
volatility frequency -0.073 -0.173 -1.456 0.145
curiosity goals -0.022 -0.148 -1.098 0.272
curiosity frequency 0.016 0.061 0.398 0.691
aesthetic goals -0.004 -0.120 -0.781 0.435
aesthetic frequency 0.011 0.191 0.826 0.409
imagination goals 0.006 0.041 0.375 0.708
imagination frequency -0.016 -0.052 -0.331 0.741

Only one moderator effect that is significantly different from zero:

  • The effect for conscientiousness (frequency of self-acceptance behaviors) is only represented within the organization facet.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp7_plot <- df_table_hyp7_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("ideal", levels = c("ideal"), labels = c("ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • ideal = ideal-level personality
  • goals = specific, facet-level acceptance goal(s) as moderator
  • frequency = frequency of self-acceptance behavior as moderator
Show the code
ggplot(df_table_hyp7_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")


7 Exploratory results

7.1 Differences in change across experimental groups (a)

We will explore a) whether change in psychological well-being indicators as well as the difference between real- and ideal- self will differ across groups at follow-up.

7.1.1 Well-being change: differences across groups

7.1.1.1 Life satisfaction

Life satisfaction: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_swls_group_config <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2a", "lamb2b")*sw06_02_t1 + c("lamb3a", "lamb3b")*sw06_03_t1 + c("lamb4a", "lamb4b")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2a", "lamb2b")*sw06_02_t2 + c("lamb3a", "lamb3b")*sw06_03_t2 + c("lamb4a", "lamb4b")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'
lcs_swls_group_config <- sem(mi_lcs_swls_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                             fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_swls_group_weak <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_weak <- sem(mi_lcs_swls_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_swls_group_strong <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_strong <- sem(mi_lcs_swls_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Life satisfaction: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_swls_group_config, lcs_swls_group_weak, lcs_swls_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                      Df   AIC   BIC   Chisq Chisq diff Df diff Pr(>Chisq)  
lcs_swls_group_config 50 12581 12749  93.676                                
lcs_swls_group_weak   53 12581 12736  99.658     6.2538       3    0.09989 .
lcs_swls_group_strong 58 12575 12708 103.548     3.8751       5    0.56754  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_swls_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Skill-Building group)
kable(broom::tidy(lcs_swls_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int_a 0.799 1.283 5.517 0
d_swls_1 ~1 d_int_b 0.700 1.051 5.060 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_swls_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int 0.752 1.219 7.526 0
d_swls_1 ~1 d_int 0.752 1.120 7.526 0

Slightly more positive change in life satisfaction in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_swls_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 62 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        58
  Number of equality constraints                    23

  Number of observations per group:               Used       Total
    Self-Acceptance                                302         302
    Skill-Building                                 316         317
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Skill-Building                                   3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                99.658      89.396
  Degrees of freedom                                53          53
  P-value (Chi-square)                           0.000       0.001
  Scaling correction factor                                  1.115
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             55.830      50.081
    Skill-Building                              43.827      39.314

Model Test Baseline Model:

  Test statistic                              3077.617    2174.072
  Degrees of freedom                                56          56
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.416

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.985       0.983
  Tucker-Lewis Index (TLI)                       0.984       0.982
                                                                  
  Robust Comparative Fit Index (CFI)                         0.987
  Robust Tucker-Lewis Index (TLI)                            0.986

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -6255.406   -6255.406
  Scaling correction factor                                  0.752
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -6205.577   -6205.577
  Scaling correction factor                                  1.167
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               12580.812   12580.812
  Bayesian (BIC)                             12735.739   12735.739
  Sample-size adjusted Bayesian (SABIC)      12624.620   12624.620

Root Mean Square Error of Approximation:

  RMSEA                                          0.053       0.047
  90 Percent confidence interval - lower         0.037       0.030
  90 Percent confidence interval - upper         0.069       0.063
  P-value H_0: RMSEA <= 0.050                    0.347       0.597
  P-value H_0: RMSEA >= 0.080                    0.002       0.000
                                                                  
  Robust RMSEA                                               0.050
  90 Percent confidence interval - lower                     0.031
  90 Percent confidence interval - upper                     0.068
  P-value H_0: Robust RMSEA <= 0.050                         0.482
  P-value H_0: Robust RMSEA >= 0.080                         0.002

Standardized Root Mean Square Residual:

  SRMR                                           0.042       0.042

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.984    0.822
    s06_02_ (lmb2)    0.831    0.031   26.671    0.000    0.817    0.737
    s06_03_ (lmb3)    1.033    0.035   29.654    0.000    1.016    0.829
    s06_04_ (lmb4)    0.870    0.036   24.278    0.000    0.856    0.710
  swls_t2 =~                                                            
    s06_01_           1.000                               1.010    0.829
    s06_02_ (lmb2)    0.831    0.031   26.671    0.000    0.839    0.746
    s06_03_ (lmb3)    1.033    0.035   29.654    0.000    1.044    0.836
    s06_04_ (lmb4)    0.870    0.036   24.278    0.000    0.879    0.719
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.616    0.616

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.974    0.974
  d_swls_1 ~                                                            
    swls_t1 (fb_a)   -0.173    0.046   -3.742    0.000   -0.273   -0.273

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cov1)    0.146    0.067    2.189    0.029    0.146    0.315
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cov2)    0.204    0.049    4.162    0.000    0.204    0.363
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cov3)    0.143    0.042    3.378    0.001    0.143    0.304
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cov4)    0.309    0.052    5.905    0.000    0.309    0.430

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
   .d_swl_1 (d_n_)    0.799    0.145    5.517    0.000    1.283    1.283
    swls_t1 (wb__)    2.689    0.065   41.116    0.000    2.734    2.734
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.597    0.103    5.822    0.000    0.597    0.538
   .s06_03_  (m3a)   -0.051    0.116   -0.437    0.662   -0.051   -0.041
   .s06_04_  (m4a)    0.399    0.117    3.397    0.001    0.399    0.331
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.597    0.103    5.822    0.000    0.597    0.531
   .s06_03_  (m3a)   -0.051    0.116   -0.437    0.662   -0.051   -0.041
   .s06_04_  (m4a)    0.399    0.117    3.397    0.001    0.399    0.327

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
   .d_swl_1 (d_v_)    0.359    0.058    6.174    0.000    0.925    0.925
    swls_t1 (wb__)    0.967    0.074   13.072    0.000    1.000    1.000
   .s06_01_ (res1)    0.465    0.071    6.555    0.000    0.465    0.325
   .s06_02_ (res2)    0.562    0.048   11.663    0.000    0.562    0.457
   .s06_03_ (res3)    0.470    0.056    8.419    0.000    0.470    0.313
   .s06_04_ (res4)    0.720    0.055   13.130    0.000    0.720    0.496
   .s06_01_ (res1)    0.465    0.071    6.555    0.000    0.465    0.313
   .s06_02_ (res2)    0.562    0.048   11.663    0.000    0.562    0.444
   .s06_03_ (res3)    0.470    0.056    8.419    0.000    0.470    0.301
   .s06_04_ (res4)    0.720    0.055   13.130    0.000    0.720    0.482


Group 2 [Skill-Building]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.951    0.840
    s06_02_ (lmb2)    0.831    0.031   26.671    0.000    0.790    0.710
    s06_03_ (lmb3)    1.033    0.035   29.654    0.000    0.983    0.842
    s06_04_ (lmb4)    0.870    0.036   24.278    0.000    0.828    0.688
  swls_t2 =~                                                            
    s06_01_           1.000                               1.037    0.861
    s06_02_ (lmb2)    0.831    0.031   26.671    0.000    0.862    0.739
    s06_03_ (lmb3)    1.033    0.035   29.654    0.000    1.072    0.862
    s06_04_ (lmb4)    0.870    0.036   24.278    0.000    0.903    0.719
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.642    0.642

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.917    0.917
  d_swls_1 ~                                                            
    swls_t1 (fb_b)   -0.150    0.044   -3.394    0.001   -0.214   -0.214

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cv1b)    0.059    0.043    1.375    0.169    0.059    0.155
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cv2b)    0.352    0.050    7.058    0.000    0.352    0.572
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cv3b)    0.040    0.041    0.980    0.327    0.040    0.100
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cv4b)    0.324    0.063    5.119    0.000    0.324    0.425

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
   .d_swl_1 (d_n_)    0.700    0.138    5.060    0.000    1.051    1.051
    swls_t1 (wb__)    2.709    0.063   43.214    0.000    2.849    2.849
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.560    0.105    5.352    0.000    0.560    0.503
   .s06_03_  (m3b)    0.020    0.112    0.176    0.860    0.020    0.017
   .s06_04_  (m4b)    0.469    0.115    4.063    0.000    0.469    0.390
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.560    0.105    5.352    0.000    0.560    0.480
   .s06_03_  (m3b)    0.020    0.112    0.176    0.860    0.020    0.016
   .s06_04_  (m4b)    0.469    0.115    4.063    0.000    0.469    0.373

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
   .d_swl_1 (d_v_)    0.423    0.054    7.828    0.000    0.954    0.954
    swls_t1 (wb__)    0.904    0.077   11.737    0.000    1.000    1.000
   .s06_01_ (rs1b)    0.377    0.047    8.005    0.000    0.377    0.294
   .s06_02_ (rs2b)    0.616    0.051   12.008    0.000    0.616    0.497
   .s06_03_ (rs3b)    0.397    0.041    9.620    0.000    0.397    0.291
   .s06_04_ (rs4b)    0.763    0.064   11.969    0.000    0.763    0.527
   .s06_01_ (rs1b)    0.377    0.047    8.005    0.000    0.377    0.259
   .s06_02_ (rs2b)    0.616    0.051   12.008    0.000    0.616    0.453
   .s06_03_ (rs3b)    0.397    0.041    9.620    0.000    0.397    0.257
   .s06_04_ (rs4b)    0.763    0.064   11.969    0.000    0.763    0.483
7.1.1.2 Meaning in life

Meaning in life: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_meaning_group_config <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2a", "lamb2b")*meaning_par2_t1 + c("lamb3a", "lamb3b")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2a", "lamb2b")*meaning_par2_t2 + c("lamb3a", "lamb3b")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_meaning_group_config <- sem(mi_lcs_meaning_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_meaning_group_weak <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_weak <- sem(mi_lcs_meaning_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_meaning_group_strong <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_strong <- sem(mi_lcs_meaning_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_meaning_group_config, lcs_meaning_group_weak, lcs_meaning_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_meaning_group_config 24 9277.2 9410.0 36.570                              
lcs_meaning_group_weak   26 9273.3 9397.3 36.734     0.1454       2     0.9299
lcs_meaning_group_strong 30 9269.0 9375.3 40.431     3.5145       4     0.4757
# show model with varying latent change parameters 
# -> key parameter is "d_meaning_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Skill-Building group)
kable(broom::tidy(lcs_meaning_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int_a 1.328 1.644 7.171 0
d_meaning_1 ~1 d_int_b 1.381 1.698 7.117 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_meaning_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int 1.353 1.664 10.113 0
d_meaning_1 ~1 d_int 1.353 1.671 10.113 0

Slightly more positive change in meaning in life in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_meaning_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 70 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                302         302
    Skill-Building                                 316         317
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Skill-Building                                   3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                36.734      34.860
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.079       0.115
  Scaling correction factor                                  1.054
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             18.358      17.421
    Skill-Building                              18.376      17.438

Model Test Baseline Model:

  Test statistic                              2765.913    2212.132
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.250

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.996       0.996
  Tucker-Lewis Index (TLI)                       0.995       0.995
                                                                  
  Robust Comparative Fit Index (CFI)                         0.997
  Robust Tucker-Lewis Index (TLI)                            0.996

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4608.675   -4608.675
  Scaling correction factor                                  0.759
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4590.308   -4590.308
  Scaling correction factor                                  1.126
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                9273.350    9273.350
  Bayesian (BIC)                              9397.292    9397.292
  Sample-size adjusted Bayesian (SABIC)       9308.397    9308.397

Root Mean Square Error of Approximation:

  RMSEA                                          0.037       0.033
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.062       0.059
  P-value H_0: RMSEA <= 0.050                    0.785       0.844
  P-value H_0: RMSEA >= 0.080                    0.001       0.001
                                                                  
  Robust RMSEA                                               0.035
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.062
  P-value H_0: Robust RMSEA <= 0.050                         0.798
  P-value H_0: Robust RMSEA >= 0.080                         0.002

Standardized Root Mean Square Residual:

  SRMR                                           0.031       0.031

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.980    0.793
    mnn_2_1 (lmb2)    1.190    0.038   31.128    0.000    1.166    0.937
    mnn_3_1 (lmb3)    1.169    0.039   30.259    0.000    1.145    0.869
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.998    0.798
    mnn_2_2 (lmb2)    1.190    0.038   31.128    0.000    1.187    0.939
    mnn_3_2 (lmb3)    1.169    0.039   30.259    0.000    1.166    0.872
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.810    0.810

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    mnng_t1           1.000                               0.982    0.982
  d_meaning_1 ~                                                         
    mnng_t1 (fb_a)   -0.322    0.055   -5.858    0.000   -0.390   -0.390

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cov1)      0.311    0.044    7.017    0.000    0.311    0.549
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cov2)      0.009    0.036    0.243    0.808    0.009    0.046
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cov3)      0.084    0.040    2.095    0.036    0.084    0.196

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
   .d_mnn_1 (d_n_)    1.328    0.185    7.171    0.000    1.644    1.644
    mnng_t1 (wb__)    3.312    0.068   48.642    0.000    3.379    3.379
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2a)   -0.182    0.138   -1.321    0.186   -0.182   -0.147
   .mnn_3_1  (m3a)   -0.096    0.144   -0.663    0.508   -0.096   -0.073
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2a)   -0.182    0.138   -1.321    0.186   -0.182   -0.144
   .mnn_3_2  (m3a)   -0.096    0.144   -0.663    0.508   -0.096   -0.072

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
   .d_mnn_1 (d_v_)    0.553    0.074    7.475    0.000    0.848    0.848
    mnng_t1 (wb__)    0.960    0.096   10.027    0.000    1.000    1.000
   .mnn_1_1 (res1)    0.567    0.045   12.562    0.000    0.567    0.371
   .mnn_2_1 (res2)    0.188    0.034    5.519    0.000    0.188    0.121
   .mnn_3_1 (res3)    0.427    0.042   10.082    0.000    0.427    0.246
   .mnn_1_2 (res1)    0.567    0.045   12.562    0.000    0.567    0.363
   .mnn_2_2 (res2)    0.188    0.034    5.519    0.000    0.188    0.118
   .mnn_3_2 (res3)    0.427    0.042   10.082    0.000    0.427    0.239


Group 2 [Skill-Building]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.913    0.772
    mnn_2_1 (lmb2)    1.190    0.038   31.128    0.000    1.086    0.913
    mnn_3_1 (lmb3)    1.169    0.039   30.259    0.000    1.067    0.862
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.965    0.789
    mnn_2_2 (lmb2)    1.190    0.038   31.128    0.000    1.149    0.921
    mnn_3_2 (lmb3)    1.169    0.039   30.259    0.000    1.128    0.874
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.843    0.843

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    mnng_t1           1.000                               0.946    0.946
  d_meaning_1 ~                                                         
    mnng_t1 (fb_b)   -0.338    0.055   -6.166    0.000   -0.379   -0.379

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cv1b)      0.332    0.052    6.433    0.000    0.332    0.587
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cv2b)      0.048    0.036    1.337    0.181    0.048    0.205
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cv3b)      0.090    0.039    2.327    0.020    0.090    0.229

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
   .d_mnn_1 (d_n_)    1.381    0.194    7.117    0.000    1.698    1.698
    mnng_t1 (wb__)    3.151    0.063   49.784    0.000    3.452    3.452
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2b)   -0.072    0.133   -0.539    0.590   -0.072   -0.060
   .mnn_3_1  (m3b)    0.015    0.141    0.107    0.915    0.015    0.012
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2b)   -0.072    0.133   -0.539    0.590   -0.072   -0.057
   .mnn_3_2  (m3b)    0.015    0.141    0.107    0.915    0.015    0.012

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
   .d_mnn_1 (d_v_)    0.567    0.082    6.936    0.000    0.856    0.856
    mnng_t1 (wb__)    0.833    0.093    8.944    0.000    1.000    1.000
   .mnn_1_1 (rs1b)    0.566    0.053   10.780    0.000    0.566    0.405
   .mnn_2_1 (rs2b)    0.235    0.038    6.200    0.000    0.235    0.166
   .mnn_3_1 (rs3b)    0.394    0.046    8.546    0.000    0.394    0.257
   .mnn_1_2 (rs1b)    0.566    0.053   10.780    0.000    0.566    0.378
   .mnn_2_2 (rs2b)    0.235    0.038    6.200    0.000    0.235    0.151
   .mnn_3_2 (rs3b)    0.394    0.046    8.546    0.000    0.394    0.236
7.1.1.3 Self-esteem

Self-esteem: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_selfes_group_config <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2a", "lamb2b")*selfes_par2_t1 + c("lamb3a", "lamb3b")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2a", "lamb2b")*selfes_par2_t2 + c("lamb3a", "lamb3b")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_selfes_group_config <- sem(mi_lcs_selfes_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_selfes_group_weak <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_weak <- sem(mi_lcs_selfes_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_selfes_group_strong <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_strong <- sem(mi_lcs_selfes_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_selfes_group_config, lcs_selfes_group_weak, lcs_selfes_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                        Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_selfes_group_config 24 6491.3 6624.1 21.406                              
lcs_selfes_group_weak   26 6489.5 6613.4 23.582     2.2801       2     0.3198
lcs_selfes_group_strong 30 6487.1 6593.4 29.256     5.4364       4     0.2454
# show model with varying latent change parameters 
# -> key parameter is "d_selfes_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Skill-Building group)
kable(broom::tidy(lcs_selfes_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int_a 1.100 2.035 7.109 0
d_selfes_1 ~1 d_int_b 0.933 1.783 6.481 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_selfes_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int 1.027 1.924 9.608 0
d_selfes_1 ~1 d_int 1.027 1.931 9.608 0

Slightly more positive change in self-esteem in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_selfes_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 76 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                302         302
    Skill-Building                                 316         317
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Skill-Building                                   3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                23.583      22.661
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.600       0.652
  Scaling correction factor                                  1.041
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             10.544      10.132
    Skill-Building                              13.038      12.529

Model Test Baseline Model:

  Test statistic                              3538.853    2838.977
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.247

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.001       1.001
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.001

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3216.737   -3216.737
  Scaling correction factor                                  0.688
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3204.946   -3204.946
  Scaling correction factor                                  1.062
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                6489.475    6489.475
  Bayesian (BIC)                              6613.417    6613.417
  Sample-size adjusted Bayesian (SABIC)       6524.522    6524.522

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.040       0.037
  P-value H_0: RMSEA <= 0.050                    0.989       0.993
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.038
  P-value H_0: Robust RMSEA <= 0.050                         0.990
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.018       0.018

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.826    0.892
    slf_2_1 (lmb2)    1.140    0.026   44.124    0.000    0.942    0.926
    slf_3_1 (lmb3)    1.157    0.027   42.509    0.000    0.956    0.923
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.791    0.884
    slf_2_2 (lmb2)    1.140    0.026   44.124    0.000    0.902    0.920
    slf_3_2 (lmb3)    1.157    0.027   42.509    0.000    0.915    0.917
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.683    0.683

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    slfs_t1           1.000                               1.044    1.044
  d_selfes_1 ~                                                          
    slfs_t1 (fb_a)   -0.256    0.043   -5.882    0.000   -0.391   -0.391

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cov1)     0.072    0.014    5.083    0.000    0.072    0.411
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cov2)     0.057    0.014    4.007    0.000    0.057    0.390
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cov3)     0.036    0.015    2.465    0.014    0.036    0.229

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
   .d_slf_1 (d_n_)    1.100    0.155    7.109    0.000    2.035    2.035
    slfs_t1 (wb__)    3.149    0.053   58.941    0.000    3.813    3.813
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2a)   -0.466    0.089   -5.244    0.000   -0.466   -0.458
   .slf_3_1  (m3a)   -0.458    0.089   -5.130    0.000   -0.458   -0.442
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2a)   -0.466    0.089   -5.244    0.000   -0.466   -0.475
   .slf_3_2  (m3a)   -0.458    0.089   -5.130    0.000   -0.458   -0.458

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
   .d_slf_1 (d_v_)    0.248    0.033    7.568    0.000    0.847    0.847
    slfs_t1 (wb__)    0.682    0.052   13.185    0.000    1.000    1.000
   .slf_1_1 (res1)    0.175    0.016   11.105    0.000    0.175    0.204
   .slf_2_1 (res2)    0.147    0.018    8.174    0.000    0.147    0.142
   .slf_3_1 (res3)    0.159    0.016    9.755    0.000    0.159    0.148
   .slf_1_2 (res1)    0.175    0.016   11.105    0.000    0.175    0.219
   .slf_2_2 (res2)    0.147    0.018    8.174    0.000    0.147    0.153
   .slf_3_2 (res3)    0.159    0.016    9.755    0.000    0.159    0.159


Group 2 [Skill-Building]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.730    0.864
    slf_2_1 (lmb2)    1.140    0.026   44.124    0.000    0.833    0.911
    slf_3_1 (lmb3)    1.157    0.027   42.509    0.000    0.845    0.888
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.765    0.874
    slf_2_2 (lmb2)    1.140    0.026   44.124    0.000    0.873    0.918
    slf_3_2 (lmb3)    1.157    0.027   42.509    0.000    0.885    0.897
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.684    0.684

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    slfs_t1           1.000                               0.954    0.954
  d_selfes_1 ~                                                          
    slfs_t1 (fb_b)   -0.208    0.043   -4.865    0.000   -0.290   -0.290

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cv1b)     0.069    0.015    4.544    0.000    0.069    0.380
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cv2b)     0.013    0.014    0.949    0.342    0.013    0.091
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cv3b)     0.054    0.019    2.849    0.004    0.054    0.282

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
   .d_slf_1 (d_n_)    0.933    0.144    6.481    0.000    1.783    1.783
    slfs_t1 (wb__)    3.113    0.046   67.561    0.000    4.263    4.263
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2b)   -0.390    0.087   -4.465    0.000   -0.390   -0.427
   .slf_3_1  (m3b)   -0.450    0.094   -4.780    0.000   -0.450   -0.473
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2b)   -0.390    0.087   -4.465    0.000   -0.390   -0.411
   .slf_3_2  (m3b)   -0.450    0.094   -4.780    0.000   -0.450   -0.456

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
   .d_slf_1 (d_v_)    0.251    0.031    8.086    0.000    0.916    0.916
    slfs_t1 (wb__)    0.533    0.043   12.431    0.000    1.000    1.000
   .slf_1_1 (rs1b)    0.181    0.017   10.802    0.000    0.181    0.253
   .slf_2_1 (rs2b)    0.141    0.015    9.477    0.000    0.141    0.169
   .slf_3_1 (rs3b)    0.191    0.019   10.192    0.000    0.191    0.211
   .slf_1_2 (rs1b)    0.181    0.017   10.802    0.000    0.181    0.236
   .slf_2_2 (rs2b)    0.141    0.015    9.477    0.000    0.141    0.157
   .slf_3_2 (rs3b)    0.191    0.019   10.192    0.000    0.191    0.196
7.1.1.4 Self-concept clarity

Self-concept clarity: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_concept_group_config <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2a", "lamb2b")*concept_par2_t1 + c("lamb3a", "lamb3b")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2a", "lamb2b")*concept_par2_t2 + c("lamb3a", "lamb3b")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_concept_group_config <- sem(mi_lcs_concept_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_concept_group_weak <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_weak <- sem(mi_lcs_concept_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_concept_group_strong <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_strong <- sem(mi_lcs_concept_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_concept_group_config, lcs_concept_group_weak, lcs_concept_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_concept_group_config 24 7539.6 7672.4 26.360                              
lcs_concept_group_weak   26 7536.2 7660.1 26.953    0.51746       2     0.7720
lcs_concept_group_strong 30 7530.2 7636.4 28.930    1.99827       4     0.7361
# show model with varying latent change parameters 
# -> key parameter is "d_concept_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Skill-Building group)
kable(broom::tidy(lcs_concept_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int_a 1.148 1.974 7.532 0
d_concept_1 ~1 d_int_b 1.036 1.906 6.734 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_concept_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int 1.095 1.902 10.081 0
d_concept_1 ~1 d_int 1.095 1.998 10.081 0

Slightly more positive change in self-concept clarity in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_concept_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 68 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                302         302
    Skill-Building                                 316         317
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Skill-Building                                   3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                26.952      26.131
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.412       0.456
  Scaling correction factor                                  1.031
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             21.040      20.398
    Skill-Building                               5.912       5.732

Model Test Baseline Model:

  Test statistic                              2476.067    1974.067
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.254

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.000       1.000
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.000

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3740.086   -3740.086
  Scaling correction factor                                  0.711
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3726.610   -3726.610
  Scaling correction factor                                  1.076
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7536.173    7536.173
  Bayesian (BIC)                              7660.115    7660.115
  Sample-size adjusted Bayesian (SABIC)       7571.220    7571.220

Root Mean Square Error of Approximation:

  RMSEA                                          0.011       0.004
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.047       0.045
  P-value H_0: RMSEA <= 0.050                    0.968       0.977
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.046
  P-value H_0: Robust RMSEA <= 0.050                         0.971
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.021       0.021

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.720    0.818
    cnc_2_1 (lmb2)    1.216    0.045   27.266    0.000    0.876    0.870
    cnc_3_1 (lmb3)    1.239    0.041   30.273    0.000    0.892    0.881
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.714    0.816
    cnc_2_2 (lmb2)    1.216    0.045   27.266    0.000    0.869    0.869
    cnc_3_2 (lmb3)    1.239    0.041   30.273    0.000    0.885    0.879
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.814    0.814

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    cncpt_1           1.000                               1.008    1.008
  d_concept_1 ~                                                         
    cncpt_1 (fb_a)   -0.334    0.049   -6.802    0.000   -0.413   -0.413

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cov1)      0.043    0.019    2.205    0.027    0.043    0.166
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cov2)      0.081    0.024    3.424    0.001    0.081    0.329
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cov3)      0.086    0.023    3.689    0.000    0.086    0.372

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
   .d_cnc_1 (d_n_)    1.148    0.152    7.532    0.000    1.974    1.974
    cncpt_1 (wb__)    2.950    0.047   62.128    0.000    4.097    4.097
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2a)   -0.420    0.142   -2.947    0.003   -0.420   -0.417
   .cnc_3_1  (m3a)   -0.785    0.127   -6.207    0.000   -0.785   -0.775
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2a)   -0.420    0.142   -2.947    0.003   -0.420   -0.419
   .cnc_3_2  (m3a)   -0.785    0.127   -6.207    0.000   -0.785   -0.780

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
   .d_cnc_1 (d_v_)    0.280    0.037    7.479    0.000    0.829    0.829
    cncpt_1 (wb__)    0.519    0.046   11.360    0.000    1.000    1.000
   .cnc_1_1 (res1)    0.256    0.019   13.538    0.000    0.256    0.331
   .cnc_2_1 (res2)    0.245    0.025    9.971    0.000    0.245    0.242
   .cnc_3_1 (res3)    0.230    0.025    9.213    0.000    0.230    0.224
   .cnc_1_2 (res1)    0.256    0.019   13.538    0.000    0.256    0.334
   .cnc_2_2 (res2)    0.245    0.025    9.971    0.000    0.245    0.245
   .cnc_3_2 (res3)    0.230    0.025    9.213    0.000    0.230    0.227


Group 2 [Skill-Building]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.651    0.773
    cnc_2_1 (lmb2)    1.216    0.045   27.266    0.000    0.792    0.858
    cnc_3_1 (lmb3)    1.239    0.041   30.273    0.000    0.807    0.853
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.699    0.795
    cnc_2_2 (lmb2)    1.216    0.045   27.266    0.000    0.851    0.874
    cnc_3_2 (lmb3)    1.239    0.041   30.273    0.000    0.867    0.869
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.777    0.777

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    cncpt_1           1.000                               0.931    0.931
  d_concept_1 ~                                                         
    cncpt_1 (fb_b)   -0.271    0.049   -5.482    0.000   -0.325   -0.325

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cv1b)      0.115    0.023    5.086    0.000    0.115    0.405
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cv2b)      0.058    0.025    2.322    0.020    0.058    0.258
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cv3b)      0.081    0.026    3.077    0.002    0.081    0.332

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
   .d_cnc_1 (d_n_)    1.036    0.154    6.734    0.000    1.906    1.906
    cncpt_1 (wb__)    2.901    0.045   63.801    0.000    4.455    4.455
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2b)   -0.397    0.138   -2.871    0.004   -0.397   -0.430
   .cnc_3_1  (m3b)   -0.722    0.126   -5.736    0.000   -0.722   -0.763
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2b)   -0.397    0.138   -2.871    0.004   -0.397   -0.408
   .cnc_3_2  (m3b)   -0.722    0.126   -5.736    0.000   -0.722   -0.723

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
   .d_cnc_1 (d_v_)    0.264    0.033    8.063    0.000    0.894    0.894
    cncpt_1 (wb__)    0.424    0.041   10.272    0.000    1.000    1.000
   .cnc_1_1 (rs1b)    0.285    0.024   11.794    0.000    0.285    0.402
   .cnc_2_1 (rs2b)    0.224    0.026    8.761    0.000    0.224    0.263
   .cnc_3_1 (rs3b)    0.244    0.031    7.846    0.000    0.244    0.273
   .cnc_1_2 (rs1b)    0.285    0.024   11.794    0.000    0.285    0.368
   .cnc_2_2 (rs2b)    0.224    0.026    8.761    0.000    0.224    0.237
   .cnc_3_2 (rs3b)    0.244    0.031    7.846    0.000    0.244    0.245

7.1.2 Current- and ideal-self personality differences across groups

Profile correlations by group and measurement occasion (mixed effects models) - results:

df_sbsa <- df_sbsa %>% mutate(time_d = time - 1)

psych::describeBy(df_sbsa$profile_corr_item_z, list(df_sbsa$rando, df_sbsa$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 298 0.38 0.49   0.37    0.37 0.47 -1.05 1.86  2.91 0.19     0.26 0.03
------------------------------------------------------------ 
: Skill-Building
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 311 0.38 0.47   0.35    0.35 0.44 -0.71 2.65  3.36 0.78     1.94 0.03
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 300 0.54 0.57    0.5    0.52 0.54 -0.9 3.44  4.34 0.92     3.17 0.03
------------------------------------------------------------ 
: Skill-Building
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 315 0.56 0.49   0.52    0.55 0.48 -0.77 2.65  3.42 0.42     0.91 0.03
psych::describeBy(df_sbsa$profile_corr_facet_z, list(df_sbsa$rando, df_sbsa$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 298 0.28 0.67   0.21    0.26 0.64 -1.5 2.56  4.06 0.31     0.25 0.04
------------------------------------------------------------ 
: Skill-Building
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 311 0.28 0.65   0.23    0.25 0.65 -1.06 2.65  3.71 0.61     0.56 0.04
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 300 0.48 0.76   0.45    0.45 0.74 -1.17 3.94  5.11 0.66     1.56 0.04
------------------------------------------------------------ 
: Skill-Building
: 1
   vars   n mean  sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 315 0.52 0.7   0.49     0.5 0.77 -1.22 2.65  3.87 0.23     -0.2 0.04
lm_profile_corr_item <- lmerTest::lmer(profile_corr_item_z ~ time_d * rando + (1 | pid), data = df_sbsa)
lm_profile_corr_facet <- lmerTest::lmer(profile_corr_facet_z ~ time_d * rando + (1 | pid), data = df_sbsa)

kable(bind_rows(as.data.frame(summary(lm_profile_corr_item)$coefficients), as.data.frame(summary(lm_profile_corr_facet)$coefficients)) %>% as_tibble() %>% mutate(outcome = c(rep("Item-level profile corr.", 4), rep("Facet-level profile corr.", 4)), term = c(rep(c("Intercept", "time", "group", "time*group"), 2))) %>% select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`), digits = 3)
outcome term Estimate Std. Error df t value p
Item-level profile corr. Intercept 0.375 0.029 841.717 12.823 0.000
Item-level profile corr. time 0.166 0.023 607.282 7.130 0.000
Item-level profile corr. group 0.002 0.041 843.314 0.055 0.956
Item-level profile corr. time*group 0.015 0.033 607.714 0.456 0.649
Facet-level profile corr. Intercept 0.277 0.040 830.493 6.881 0.000
Facet-level profile corr. time 0.204 0.031 607.089 6.516 0.000
Facet-level profile corr. group 0.008 0.056 832.054 0.148 0.882
Facet-level profile corr. time*group 0.028 0.044 607.505 0.630 0.529

Squared trait-/facet-differences by group and measurement occasion (mixed effects models) - results:

mod_traits_sqdiff_groups <- df_sbsa %>% 
  select(pid, time_d, rando, ends_with("_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(names(b5_vars))

mod_traits_sqdiff_groups_unlist <- as.data.frame(summary(mod_traits_sqdiff_groups[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(mod_traits_sqdiff_groups)) {
  mod_traits_sqdiff_groups_unlist <- bind_rows(mod_traits_sqdiff_groups_unlist, 
                                               as.data.frame(summary(mod_traits_sqdiff_groups[[i]])$coefficients) %>% as_tibble())
}

kable(mod_traits_sqdiff_groups_unlist %>% 
        mutate(outcome = rep(names(b5_vars), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`), 
      digits = 3)
outcome term Estimate Std. Error df t value p
extraversion Intercept 0.447 0.046 1126.156 9.747 0.000
extraversion time -0.115 0.056 603.000 -2.076 0.038
extraversion group -0.031 0.064 1126.156 -0.478 0.633
extraversion time*group 0.050 0.078 603.000 0.637 0.524
agreeableness Intercept 0.570 0.048 894.007 11.857 0.000
agreeableness time -0.143 0.044 603.000 -3.285 0.001
agreeableness group -0.043 0.067 894.007 -0.636 0.525
agreeableness time*group -0.038 0.061 603.000 -0.628 0.531
conscientiousness Intercept 3.986 0.235 872.522 16.937 0.000
conscientiousness time -0.546 0.206 603.000 -2.655 0.008
conscientiousness group 0.081 0.329 872.522 0.245 0.807
conscientiousness time*group -0.187 0.288 603.000 -0.649 0.516
neuroticism Intercept 1.827 0.124 976.557 14.764 0.000
neuroticism time -0.493 0.126 603.000 -3.928 0.000
neuroticism group -0.121 0.173 976.557 -0.697 0.486
neuroticism time*group 0.096 0.176 603.000 0.547 0.584
openness Intercept 0.596 0.050 1006.579 11.976 0.000
openness time -0.176 0.052 603.000 -3.354 0.001
openness group -0.125 0.070 1006.579 -1.792 0.073
openness time*group 0.042 0.073 603.000 0.576 0.565
sociability Intercept 1.844 0.112 852.645 16.510 0.000
sociability time -0.379 0.094 603.000 -4.024 0.000
sociability group -0.304 0.156 852.645 -1.946 0.052
sociability time*group 0.097 0.132 603.000 0.739 0.460
assertiveness Intercept 0.519 0.056 1129.612 9.312 0.000
assertiveness time -0.106 0.068 603.000 -1.568 0.117
assertiveness group 0.049 0.078 1129.612 0.634 0.526
assertiveness time*group -0.087 0.095 603.000 -0.913 0.362
energy Intercept 4.252 0.231 811.998 18.391 0.000
energy time -0.989 0.180 603.000 -5.494 0.000
energy group -0.190 0.324 811.998 -0.586 0.558
energy time*group 0.100 0.252 603.000 0.395 0.693
compassion Intercept 2.043 0.140 960.187 14.624 0.000
compassion time -0.435 0.139 603.000 -3.133 0.002
compassion group 0.094 0.196 960.187 0.482 0.630
compassion time*group -0.098 0.194 603.000 -0.503 0.615
respectfulness Intercept 1.845 0.107 883.675 17.273 0.000
respectfulness time -0.511 0.095 603.000 -5.374 0.000
respectfulness group -0.016 0.149 883.675 -0.107 0.915
respectfulness time*group 0.038 0.133 603.000 0.284 0.776
trust Intercept 1.283 0.110 895.578 11.637 0.000
trust time -0.299 0.100 603.000 -2.990 0.003
trust group -0.059 0.154 895.578 -0.379 0.704
trust time*group 0.153 0.140 603.000 1.091 0.276
organization Intercept 3.387 0.192 781.307 17.638 0.000
organization time -0.660 0.139 603.000 -4.741 0.000
organization group -0.008 0.269 781.307 -0.029 0.977
organization time*group -0.046 0.195 603.000 -0.236 0.813
productiveness Intercept 0.461 0.040 964.821 11.596 0.000
productiveness time -0.099 0.040 603.000 -2.489 0.013
productiveness group -0.001 0.056 964.821 -0.010 0.992
productiveness time*group 0.005 0.056 603.000 0.086 0.931
responsibility Intercept 2.153 0.146 913.370 14.752 0.000
responsibility time -0.484 0.136 603.000 -3.562 0.000
responsibility group -0.440 0.204 913.370 -2.156 0.031
responsibility time*group 0.183 0.190 603.000 0.961 0.337
anxiety Intercept 3.116 0.179 840.814 17.365 0.000
anxiety time -0.531 0.148 603.000 -3.585 0.000
anxiety group -0.391 0.251 840.814 -1.556 0.120
anxiety time*group -0.013 0.207 603.000 -0.062 0.951
depression Intercept 0.620 0.061 955.530 10.154 0.000
depression time -0.110 0.060 603.000 -1.816 0.070
depression group 0.064 0.085 955.530 0.749 0.454
depression time*group -0.092 0.084 603.000 -1.084 0.279
volatility Intercept 1.309 0.101 925.284 13.019 0.000
volatility time -0.264 0.095 603.000 -2.764 0.006
volatility group -0.125 0.141 925.284 -0.887 0.375
volatility time*group 0.033 0.133 603.000 0.247 0.805
curiosity Intercept 2.889 0.172 857.042 16.819 0.000
curiosity time -0.840 0.146 603.000 -5.747 0.000
curiosity group -0.041 0.240 857.042 -0.171 0.864
curiosity time*group 0.103 0.204 603.000 0.506 0.613
aesthetic Intercept 1.216 0.098 1004.161 12.459 0.000
aesthetic time -0.277 0.103 603.000 -2.707 0.007
aesthetic group 0.024 0.137 1004.161 0.176 0.860
aesthetic time*group -0.144 0.143 603.000 -1.004 0.316
imagination Intercept 2.938 0.201 820.936 14.635 0.000
imagination time -0.635 0.159 603.000 -3.987 0.000
imagination group 0.057 0.281 820.936 0.203 0.839
imagination time*group -0.097 0.223 603.000 -0.435 0.664

With both conceptualizations of the similarity / difference of current- and ideal-level personality (profile correlations / squared differences), we find no significant effects of group (at T1) or of interaction effects of group by measurement occasion (at T2).

7.2 Personal project dimensions (b)

We will explore b) whether the extent of change/acceptance is related to personal project dimension variables.

For now, I use the personal project dimension variables assessed at T1:

  • Skill-building group: “How important is it for you to change your personality?”
  • Skill-building group: “How difficult is it for you to work on changing your personality?”
  • Self-acceptance group: “How important is it for you to accept your personality?”
  • Self-acceptance group: “How difficult is it for you to work on accepting your personality?”

They were, however, also assessed at T2:

  • Skill-building group: “During this study, how important was it for you to change your personality?”
  • Skill-building group: “During this study, how difficult was it for you to work on changing your personality?”
  • Self-acceptance group: “During this study, how important was it for you to accept your personality?”
  • Self-acceptance group: “During this study, how difficult was it for you to work on accepting your personality?”

7.2.1 Personal project dimensions as moderators of change in personality in skill-building group

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb_ppd <- df_sbsa %>% 
  filter(rando=="Skill-Building") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb01"))) %>% # Personal project dimensions - skill building
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb01")))) %>% 
  select(-c(sb01_01_t2, sb01_02_t2))
# colnames(df_sbsa_wide_pers_sb_ppd)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb_ppd <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Skill-Building") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb_ppd)

# need to form a mean score because some models did not converge when using the latent factor of PPD (but high correlation between the two items)
df_sbsa_wide_pers_sb_ppd <- df_sbsa_wide_pers_sb_ppd %>% mutate(ppd = rowMeans(across(c(sb01_01_t1, sb01_02_t1)), na.rm=T))
7.2.1.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_ppd_skill <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~ ppd               # This estimates the moderation effect on personality at T1
d_trait_1 ~ trait_t1 + ppd   # This estimates the self-feedback parameter and the moderation effect on the change score

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_ppd_skill, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), trait_model_fit))
}  
7.2.1.1.1 Extraversion: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 19 4081.961 4153.38 0.994 0.038 0.034
# parameters of interest
params_lcs_extra_curr_ppd <- broom::tidy(fit_mi_lcs_extra_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "d_extra_1 ~ ppd", "ppd ~~ ppd", "extra_t1 ~ ppd", # change ppd
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.994 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.569 NA NA
d_extra_1 ~1 0.313 0.021 0.604 0.941 2.102 0.036
extra_t1 ~1 3.344 3.077 3.612 5.757 24.491 0.000
d_extra_1 ~~ d_extra_1 0.100 0.063 0.136 0.901 5.315 0.000
extra_t1 ~ ppd -0.172 -0.246 -0.098 -0.275 -4.569 0.000
d_extra_1 ~ extra_t1 -0.133 -0.218 -0.049 -0.233 -3.084 0.002
d_extra_1 ~ ppd 0.056 0.003 0.110 0.158 2.082 0.037
ppd ~~ ppd 0.862 0.742 0.983 1.000 14.009 0.000

Personal project dimensions significantly moderate changes in extraversion (current-self), b = 0.056, p = 0.037.

7.2.1.1.2 Agreeableness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 19 3679.044 3750.463 0.982 0.053 0.038
# parameters of interest
params_lcs_agree_curr_ppd <- broom::tidy(fit_mi_lcs_agree_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "d_agree_1 ~ ppd", "ppd ~~ ppd", "agree_t1 ~ ppd", # change ppd
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.056 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.542 NA NA
d_agree_1 ~1 0.746 0.405 1.088 3.413 4.286 0.000
agree_t1 ~1 3.494 3.253 3.736 8.197 28.354 0.000
d_agree_1 ~~ d_agree_1 0.042 0.019 0.064 0.869 3.677 0.000
agree_t1 ~ ppd -0.044 -0.110 0.022 -0.096 -1.310 0.190
d_agree_1 ~ agree_t1 -0.186 -0.273 -0.099 -0.363 -4.204 0.000
d_agree_1 ~ ppd -0.014 -0.050 0.022 -0.061 -0.776 0.438
ppd ~~ ppd 0.863 0.742 0.984 1.000 13.993 0.000

The moderation effect of personal project dimensions with the agreeableness change score (current-self) is not significantly different from zero, b = -0.014, p = 0.438.

7.2.1.1.3 Conscientiousness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 19 3833.166 3904.586 0.999 0.015 0.016
# parameters of interest
params_lcs_consc_curr_ppd <- broom::tidy(fit_mi_lcs_consc_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "d_consc_1 ~ ppd", "ppd ~~ ppd", "consc_t1 ~ ppd", # change ppd
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.040 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.453 NA NA
d_consc_1 ~1 0.525 0.197 0.853 1.629 3.137 0.002
consc_t1 ~1 4.070 3.765 4.376 5.501 26.102 0.000
d_consc_1 ~~ d_consc_1 0.094 0.059 0.129 0.906 5.294 0.000
consc_t1 ~ ppd -0.233 -0.320 -0.146 -0.292 -5.232 0.000
d_consc_1 ~ consc_t1 -0.130 -0.198 -0.062 -0.299 -3.766 0.000
d_consc_1 ~ ppd 0.007 -0.042 0.057 0.022 0.300 0.764
ppd ~~ ppd 0.864 0.743 0.985 1.000 13.973 0.000

The moderation effect of personal project dimensions with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.007, p = 0.764.

7.2.1.1.4 Neuroticism: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 19 4405.752 4477.171 0.988 0.059 0.028
# parameters of interest
params_lcs_neuro_curr_ppd <- broom::tidy(fit_mi_lcs_neuro_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "d_neuro_1 ~ ppd", "ppd ~~ ppd", "neuro_t1 ~ ppd", # change ppd
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.014 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.603 NA NA
d_neuro_1 ~1 0.539 0.251 0.826 1.088 3.675 0.000
neuro_t1 ~1 2.376 2.008 2.744 2.852 12.657 0.000
d_neuro_1 ~~ d_neuro_1 0.218 0.148 0.288 0.889 6.109 0.000
neuro_t1 ~ ppd 0.337 0.236 0.439 0.376 6.519 0.000
d_neuro_1 ~ neuro_t1 -0.170 -0.249 -0.090 -0.285 -4.187 0.000
d_neuro_1 ~ ppd -0.051 -0.117 0.015 -0.095 -1.507 0.132
ppd ~~ ppd 0.862 0.742 0.983 1.000 14.019 0.000

The moderation effect of personal project dimensions with the neuroticism change score (current-self) is not significantly different from zero, b = -0.051, p = 0.132.

7.2.1.1.5 Openness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 19 3974.892 4046.312 0.994 0.033 0.023
# parameters of interest
params_lcs_openn_curr_ppd <- broom::tidy(fit_mi_lcs_openn_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "d_openn_1 ~ ppd", "ppd ~~ ppd", "openn_t1 ~ ppd", # change ppd
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.913 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.394 NA NA
d_openn_1 ~1 0.027 -0.303 0.357 0.143 0.161 0.872
openn_t1 ~1 3.545 3.323 3.768 8.046 31.180 0.000
d_openn_1 ~~ d_openn_1 0.036 0.014 0.058 0.999 3.250 0.001
openn_t1 ~ ppd 0.002 -0.060 0.064 0.005 0.068 0.945
d_openn_1 ~ openn_t1 0.006 -0.079 0.091 0.015 0.146 0.884
d_openn_1 ~ ppd 0.004 -0.036 0.044 0.020 0.204 0.838
ppd ~~ ppd 0.862 0.742 0.983 1.000 14.007 0.000

The moderation effect of personal project dimensions with the openness change score (current-self) is not significantly different from zero, b = 0.004, p = 0.838.

7.2.1.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goal

facet_template_ppd_skill <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~ ppd               # This estimates the moderation effect on personality at T1
d_facet_1 ~ facet_t1 + ppd   # This estimates the self-feedback parameter and the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_ppd_skill, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), facet_model_fit))
}  
7.2.1.2.1 Sociability - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7621.367 7707.822 0.949 0.079 0.052
# parameters of interest
params_lcs_socia_curr_ppd <- broom::tidy(fit_mi_lcs_socia_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                     "d_socia_1 ~ ppd", "ppd ~~ ppd", "d_socia_1 ~ ppd", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.013 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.632 NA NA
d_socia_1 ~1 0.526 0.100 0.953 0.987 2.422 0.015
socia_t1 ~1 3.173 2.728 3.618 3.712 13.969 0.000
d_socia_1 ~~ d_socia_1 0.249 0.149 0.349 0.875 4.871 0.000
d_socia_1 ~ socia_t1 -0.198 -0.297 -0.099 -0.317 -3.926 0.000
d_socia_1 ~ ppd 0.069 -0.025 0.163 0.120 1.446 0.148
ppd ~~ ppd 0.863 0.742 0.983 1.000 14.008 0.000

The moderation effect of personal project dimensions with the sociability change score (current-self) is not significantly different from zero, b = 0.069, p = 0.148.

7.2.1.2.2 Assertiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7950.19 8036.644 1 0 0.036
# parameters of interest
params_lcs_asser_curr_ppd <- broom::tidy(fit_mi_lcs_asser_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                     "d_asser_1 ~ ppd", "ppd ~~ ppd", "d_asser_1 ~ ppd", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.000 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.353 NA NA
d_asser_1 ~1 -0.035 -0.468 0.399 -0.172 -0.157 0.876
asser_t1 ~1 3.553 3.251 3.856 6.223 23.012 0.000
d_asser_1 ~~ d_asser_1 0.037 -0.006 0.079 0.899 1.703 0.089
d_asser_1 ~ asser_t1 -0.038 -0.154 0.077 -0.109 -0.652 0.514
d_asser_1 ~ ppd 0.059 -0.002 0.121 0.272 1.882 0.060
ppd ~~ ppd 0.863 0.742 0.984 1.000 13.998 0.000

The moderation effect of personal project dimensions with the assertiveness change score (current-self) is not significantly different from zero, b = 0.059, p = 0.06.

7.2.1.2.3 Energy - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7874.662 7961.116 0.965 0.057 0.041
# parameters of interest
params_lcs_energ_curr_ppd <- broom::tidy(fit_mi_lcs_energ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                     "d_energ_1 ~ ppd", "ppd ~~ ppd", "d_energ_1 ~ ppd", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.991 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.561 NA NA
d_energ_1 ~1 0.326 0.039 0.612 1.303 2.228 0.026
energ_t1 ~1 2.084 1.826 2.342 4.725 15.829 0.000
d_energ_1 ~~ d_energ_1 0.058 0.017 0.098 0.925 2.791 0.005
d_energ_1 ~ energ_t1 -0.138 -0.252 -0.024 -0.243 -2.363 0.018
d_energ_1 ~ ppd -0.018 -0.067 0.031 -0.065 -0.702 0.483
ppd ~~ ppd 0.862 0.741 0.983 1.000 14.009 0.000

The moderation effect of personal project dimensions with the energy change score (current-self) is not significantly different from zero, b = -0.018, p = 0.483.

7.2.1.2.4 Compassion - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7672.655 7759.11 0.983 0.032 0.042
# parameters of interest
params_lcs_compa_curr_ppd <- broom::tidy(fit_mi_lcs_compa_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                     "d_compa_1 ~ ppd", "ppd ~~ ppd", "d_compa_1 ~ ppd", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.147 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.349 NA NA
d_compa_1 ~1 0.641 0.086 1.197 3.065 2.263 0.024
compa_t1 ~1 4.268 3.878 4.658 6.200 21.443 0.000
d_compa_1 ~~ d_compa_1 0.029 -0.033 0.092 0.670 0.921 0.357
d_compa_1 ~ compa_t1 -0.164 -0.283 -0.045 -0.540 -2.707 0.007
d_compa_1 ~ ppd 0.040 -0.023 0.103 0.176 1.230 0.219
ppd ~~ ppd 0.862 0.742 0.983 1.000 14.006 0.000

The moderation effect of personal project dimensions with the compassion change score (current-self) is not significantly different from zero, b = 0.04, p = 0.219.

7.2.1.2.5 Respectfulness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7014.829 7101.284 0.947 0.068 0.055
# parameters of interest
params_lcs_respe_curr_ppd <- broom::tidy(fit_mi_lcs_respe_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                     "d_respe_1 ~ ppd", "ppd ~~ ppd", "d_respe_1 ~ ppd", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.097 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.600 NA NA
d_respe_1 ~1 1.243 0.689 1.797 3.901 4.396 0.000
respe_t1 ~1 4.558 4.248 4.869 7.821 28.774 0.000
d_respe_1 ~~ d_respe_1 0.082 0.041 0.122 0.804 3.980 0.000
d_respe_1 ~ respe_t1 -0.239 -0.350 -0.128 -0.436 -4.211 0.000
d_respe_1 ~ ppd -0.039 -0.089 0.010 -0.114 -1.551 0.121
ppd ~~ ppd 0.862 0.742 0.983 1.000 14.007 0.000

The moderation effect of personal project dimensions with the respectfulness change score (current-self) is not significantly different from zero, b = -0.039, p = 0.121.

7.2.1.2.6 Trust - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 8030.473 8116.928 0.94 0.067 0.051
# parameters of interest
params_lcs_trust_curr_ppd <- broom::tidy(fit_mi_lcs_trust_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                     "d_trust_1 ~ ppd", "ppd ~~ ppd", "d_trust_1 ~ ppd", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.031 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.561 NA NA
d_trust_1 ~1 0.392 -0.055 0.840 1.189 1.718 0.086
trust_t1 ~1 2.745 2.409 3.080 4.526 16.026 0.000
d_trust_1 ~~ d_trust_1 0.097 0.016 0.179 0.893 2.332 0.020
d_trust_1 ~ trust_t1 -0.178 -0.317 -0.038 -0.327 -2.496 0.013
d_trust_1 ~ ppd -0.003 -0.067 0.062 -0.007 -0.078 0.938
ppd ~~ ppd 0.863 0.742 0.983 1.000 14.006 0.000

The moderation effect of personal project dimensions with the trust change score (current-self) is not significantly different from zero, b = -0.003, p = 0.938.

7.2.1.2.7 Organization - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7594.782 7681.237 0.98 0.052 0.034
# parameters of interest
params_lcs_organ_curr_ppd <- broom::tidy(fit_mi_lcs_organ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                     "d_organ_1 ~ ppd", "ppd ~~ ppd", "d_organ_1 ~ ppd", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.086 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.524 NA NA
d_organ_1 ~1 0.520 0.215 0.824 1.005 3.347 0.001
organ_t1 ~1 1.966 1.477 2.454 1.835 7.889 0.000
d_organ_1 ~~ d_organ_1 0.224 0.122 0.325 0.836 4.332 0.000
d_organ_1 ~ organ_t1 -0.185 -0.264 -0.105 -0.382 -4.546 0.000
d_organ_1 ~ ppd -0.042 -0.121 0.037 -0.075 -1.036 0.300
ppd ~~ ppd 0.864 0.743 0.985 1.000 13.994 0.000

The moderation effect of personal project dimensions with the organization change score (current-self) is not significantly different from zero, b = -0.042, p = 0.3.

7.2.1.2.8 Productiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7532.131 7618.586 0.971 0.056 0.037
# parameters of interest
params_lcs_produ_curr_ppd <- broom::tidy(fit_mi_lcs_produ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                     "d_produ_1 ~ ppd", "ppd ~~ ppd", "d_produ_1 ~ ppd", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.044 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.480 NA NA
d_produ_1 ~1 0.393 0.049 0.738 1.118 2.237 0.025
produ_t1 ~1 2.359 1.972 2.746 3.085 11.951 0.000
d_produ_1 ~~ d_produ_1 0.110 0.053 0.167 0.891 3.796 0.000
d_produ_1 ~ produ_t1 -0.133 -0.240 -0.027 -0.290 -2.453 0.014
d_produ_1 ~ ppd -0.033 -0.101 0.036 -0.087 -0.940 0.347
ppd ~~ ppd 0.863 0.742 0.984 1.000 13.998 0.000

The moderation effect of personal project dimensions with the productiveness change score (current-self) is not significantly different from zero, b = -0.033, p = 0.347.

7.2.1.2.9 Responsibility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7597.449 7683.904 0.922 0.083 0.08
# parameters of interest
params_lcs_respo_curr_ppd <- broom::tidy(fit_mi_lcs_respo_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                     "d_respo_1 ~ ppd", "ppd ~~ ppd", "d_respo_1 ~ ppd", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.997 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.435 NA NA
d_respo_1 ~1 0.574 0.128 1.021 2.855 2.523 0.012
respo_t1 ~1 3.984 3.747 4.221 8.636 32.907 0.000
d_respo_1 ~~ d_respo_1 0.037 0.004 0.071 0.925 2.164 0.031
d_respo_1 ~ respo_t1 -0.109 -0.210 -0.007 -0.249 -2.099 0.036
d_respo_1 ~ ppd -0.038 -0.085 0.008 -0.177 -1.605 0.108
ppd ~~ ppd 0.864 0.742 0.985 1.000 13.974 0.000

The moderation effect of personal project dimensions with the responsibility change score (current-self) is not significantly different from zero, b = -0.038, p = 0.108.

7.2.1.2.10 Anxiety - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7938.628 8025.083 0.983 0.039 0.039
# parameters of interest
params_lcs_anxie_curr_ppd <- broom::tidy(fit_mi_lcs_anxie_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                     "d_anxie_1 ~ ppd", "ppd ~~ ppd", "d_anxie_1 ~ ppd", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.076 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.669 NA NA
d_anxie_1 ~1 0.753 0.259 1.247 1.309 2.987 0.003
anxie_t1 ~1 3.825 3.385 4.265 4.137 17.043 0.000
d_anxie_1 ~~ d_anxie_1 0.271 0.127 0.414 0.819 3.699 0.000
d_anxie_1 ~ anxie_t1 -0.247 -0.364 -0.130 -0.397 -4.141 0.000
d_anxie_1 ~ ppd 0.046 -0.038 0.130 0.074 1.067 0.286
ppd ~~ ppd 0.863 0.742 0.983 1.000 14.008 0.000

The moderation effect of personal project dimensions with the anxiety change score (current-self) is not significantly different from zero, b = 0.046, p = 0.286.

7.2.1.2.11 Depression - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7762.354 7848.809 0.949 0.086 0.059
# parameters of interest
params_lcs_depre_curr_ppd <- broom::tidy(fit_mi_lcs_depre_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                     "d_depre_1 ~ ppd", "ppd ~~ ppd", "d_depre_1 ~ ppd", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.957 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.546 NA NA
d_depre_1 ~1 0.228 -0.184 0.640 0.596 1.083 0.279
depre_t1 ~1 3.917 3.577 4.258 5.860 22.543 0.000
d_depre_1 ~~ d_depre_1 0.137 0.076 0.199 0.942 4.378 0.000
d_depre_1 ~ depre_t1 -0.086 -0.178 0.006 -0.151 -1.835 0.067
d_depre_1 ~ ppd 0.056 -0.006 0.118 0.135 1.760 0.078
ppd ~~ ppd 0.862 0.742 0.983 1.000 14.020 0.000

The moderation effect of personal project dimensions with the depression change score (current-self) is not significantly different from zero, b = 0.056, p = 0.078.

7.2.1.2.12 Volatility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7923.883 8010.337 0.989 0.036 0.031
# parameters of interest
params_lcs_volat_curr_ppd <- broom::tidy(fit_mi_lcs_volat_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                     "d_volat_1 ~ ppd", "ppd ~~ ppd", "d_volat_1 ~ ppd", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.073 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.601 NA NA
d_volat_1 ~1 0.550 0.230 0.871 1.101 3.364 0.001
volat_t1 ~1 2.317 1.901 2.734 2.596 10.903 0.000
d_volat_1 ~~ d_volat_1 0.210 0.133 0.287 0.842 5.360 0.000
d_volat_1 ~ volat_t1 -0.218 -0.296 -0.141 -0.390 -5.508 0.000
d_volat_1 ~ ppd -0.014 -0.093 0.066 -0.025 -0.336 0.737
ppd ~~ ppd 0.863 0.742 0.983 1.000 14.005 0.000

The moderation effect of personal project dimensions with the volatility change score (current-self) is not significantly different from zero, b = -0.014, p = 0.737.

7.2.1.2.13 Curiosity - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7710.009 7796.464 0.977 0.04 0.046
# parameters of interest
params_lcs_curio_curr_ppd <- broom::tidy(fit_mi_lcs_curio_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                     "d_curio_1 ~ ppd", "ppd ~~ ppd", "d_curio_1 ~ ppd", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.027 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.353 NA NA
d_curio_1 ~1 0.470 -0.032 0.973 2.812 1.833 0.067
curio_t1 ~1 3.862 3.582 4.142 7.925 27.031 0.000
d_curio_1 ~~ d_curio_1 0.026 -0.017 0.068 0.920 1.185 0.236
d_curio_1 ~ curio_t1 -0.080 -0.199 0.039 -0.232 -1.311 0.190
d_curio_1 ~ ppd -0.025 -0.078 0.029 -0.138 -0.906 0.365
ppd ~~ ppd 0.863 0.742 0.983 1.000 14.003 0.000

The moderation effect of personal project dimensions with the curiosity change score (current-self) is not significantly different from zero, b = -0.025, p = 0.365.

7.2.1.2.14 Aesthetic - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7939.886 8026.341 0.997 0.019 0.035
# parameters of interest
params_lcs_aesth_curr_ppd <- broom::tidy(fit_mi_lcs_aesth_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                     "d_aesth_1 ~ ppd", "ppd ~~ ppd", "d_aesth_1 ~ ppd", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.979 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.510 NA NA
d_aesth_1 ~1 0.344 0.026 0.662 12.812 2.122 0.034
aesth_t1 ~1 2.981 2.859 3.104 57.861 47.780 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.951 4.480 0.000
d_aesth_1 ~ aesth_t1 -0.113 -0.219 -0.007 -0.216 -2.093 0.036
d_aesth_1 ~ ppd -0.001 -0.006 0.003 -0.041 -0.509 0.611
ppd ~~ ppd 0.863 0.742 0.983 1.000 14.006 0.000

The moderation effect of personal project dimensions with the aesthetic change score (current-self) is not significantly different from zero, b = -0.001, p = 0.611.

7.2.1.2.15 Imagination - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
317 23 7524.192 7610.647 0.976 0.048 0.051
# parameters of interest
params_lcs_imagi_curr_ppd <- broom::tidy(fit_mi_lcs_imagi_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                     "d_imagi_1 ~ ppd", "ppd ~~ ppd", "d_imagi_1 ~ ppd", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.990 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.496 NA NA
d_imagi_1 ~1 0.392 -0.164 0.949 0.998 1.381 0.167
imagi_t1 ~1 3.913 3.534 4.291 4.996 20.270 0.000
d_imagi_1 ~~ d_imagi_1 0.146 0.062 0.230 0.944 3.397 0.001
d_imagi_1 ~ imagi_t1 -0.111 -0.232 0.009 -0.222 -1.806 0.071
d_imagi_1 ~ ppd 0.026 -0.044 0.095 0.061 0.722 0.470
ppd ~~ ppd 0.863 0.742 0.983 1.000 14.003 0.000

The moderation effect of personal project dimensions with the imagination change score (current-self) is not significantly different from zero, b = 0.026, p = 0.47.

7.2.1.3 Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_ppd_skill <- bind_rows(
  #traits
  params_lcs_extra_curr_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_curr_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_curr_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_curr_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_curr_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_curr_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_curr_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_curr_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_curr_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_curr_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_curr_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_curr_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_curr_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_curr_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_curr_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_curr_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_curr_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_curr_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_curr_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_curr_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20)) %>% 
  select(trait, moderator, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_skill[1:5, ], digits = 3)
trait moderator estimate std.all statistic p.value
extraversion ppd 0.056 0.158 2.082 0.037
agreeableness ppd -0.014 -0.061 -0.776 0.438
conscientiousness ppd 0.007 0.022 0.300 0.764
neuroticism ppd -0.051 -0.095 -1.507 0.132
openness ppd 0.004 0.020 0.204 0.838

Only one moderator effect significantly differs from zero:

  • changes in current-level extraversion are moderated by the personal project dimensions

Results summary across the Big Five facets: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_skill[6:20, ], digits = 3)
trait moderator estimate std.all statistic p.value
sociability ppd 0.069 0.120 1.446 0.148
assertiveness ppd 0.059 0.272 1.882 0.060
energy ppd -0.018 -0.065 -0.702 0.483
compassion ppd 0.040 0.176 1.230 0.219
respectfulness ppd -0.039 -0.114 -1.551 0.121
trust ppd -0.003 -0.007 -0.078 0.938
organization ppd -0.042 -0.075 -1.036 0.300
productiveness ppd -0.033 -0.087 -0.940 0.347
responsibility ppd -0.038 -0.177 -1.605 0.108
anxiety ppd 0.046 0.074 1.067 0.286
depression ppd 0.056 0.135 1.760 0.078
volatility ppd -0.014 -0.025 -0.336 0.737
curiosity ppd -0.025 -0.138 -0.906 0.365
aesthetic ppd -0.001 -0.041 -0.509 0.611
imagination ppd 0.026 0.061 0.722 0.470

No significant moderation effects of personal project dimensions on the facet-level.

7.2.2 Personal project dimensions as moderators of change in personality in self-acceptance group

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa_ppd <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa01")))) %>% 
  select(-c(sa01_01_t2, sa01_02_t2)) 

# colnames(df_sbsa_wide_pers_sa_ppd)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa_ppd <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa_ppd)

# need to form a mean score because some models did not converge when using the latent factor of PPD (but high correlation between the two items)
df_sbsa_wide_pers_sa_ppd <- df_sbsa_wide_pers_sa_ppd %>% mutate(ppd = rowMeans(across(c(sa01_01_t1, sa01_02_t1)), na.rm=T))
7.2.2.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates

trait_template_ppd_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~ ppd               # This estimates the moderation effect on personality at T1
d_trait_1 ~ trait_t1 + ppd   # This estimates the self-feedback parameter and the moderation effect on the change score

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_ppd_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), trait_model_fit))
}  
7.2.2.1.1 Extraversion: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 19 3393.677 3464.175 0.991 0.03 0.036
# parameters of interest
params_lcs_extra_ideal_ppd <- broom::tidy(fit_mi_lcs_extra_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "d_extra_1 ~ extra_t1", # change parameters
                           "d_extra_1 ~ ppd", "ppd ~~ ppd", "extra_t1 ~ ppd", # acceptance ppd
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.049 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.785 NA NA
d_extra_1 ~1 1.254 0.695 1.813 4.755 4.398 0.000
extra_t1 ~1 3.913 3.664 4.161 11.114 30.862 0.000
d_extra_1 ~~ d_extra_1 0.056 0.027 0.086 0.810 3.710 0.000
extra_t1 ~ ppd -0.018 -0.081 0.044 -0.041 -0.578 0.564
d_extra_1 ~ extra_t1 -0.326 -0.464 -0.189 -0.436 -4.647 0.000
d_extra_1 ~ ppd -0.008 -0.055 0.040 -0.023 -0.319 0.750
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.004 0.000

The moderation effect of personal project dimensions with the extraversion change score (ideal-self) is not significantly different from zero, b = -0.008, p = 0.75.

7.2.2.1.2 Agreeableness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 19 3595.852 3666.35 1 0 0.02
# parameters of interest
params_lcs_agree_ideal_ppd <- broom::tidy(fit_mi_lcs_agree_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "d_agree_1 ~ agree_t1", # change parameters
                           "d_agree_1 ~ ppd", "ppd ~~ ppd", "agree_t1 ~ ppd", # acceptance ppd
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.954 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.617 NA NA
d_agree_1 ~1 0.651 0.211 1.090 2.205 2.903 0.004
agree_t1 ~1 3.648 3.314 3.982 7.988 21.416 0.000
d_agree_1 ~~ d_agree_1 0.082 0.044 0.119 0.936 4.263 0.000
agree_t1 ~ ppd 0.076 -0.008 0.160 0.131 1.774 0.076
d_agree_1 ~ agree_t1 -0.156 -0.259 -0.052 -0.241 -2.956 0.003
d_agree_1 ~ ppd -0.019 -0.076 0.038 -0.050 -0.644 0.520
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.002 0.000

The moderation effect of personal project dimensions with the agreeableness change score (ideal-self) is not significantly different from zero, b = -0.019, p = 0.52.

7.2.2.1.3 Conscientiousness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 19 2977.869 3048.367 0.984 0.048 0.031
# parameters of interest
params_lcs_consc_ideal_ppd <- broom::tidy(fit_mi_lcs_consc_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "d_consc_1 ~ consc_t1", # change parameters
                           "d_consc_1 ~ ppd", "ppd ~~ ppd", "consc_t1 ~ ppd", # acceptance ppd
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.980 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.746 NA NA
d_consc_1 ~1 1.391 0.693 2.088 4.463 3.907 0.000
consc_t1 ~1 4.127 3.874 4.381 10.085 31.915 0.000
d_consc_1 ~~ d_consc_1 0.082 0.052 0.111 0.843 5.427 0.000
consc_t1 ~ ppd 0.070 0.005 0.135 0.134 2.107 0.035
d_consc_1 ~ consc_t1 -0.250 -0.409 -0.091 -0.329 -3.077 0.002
d_consc_1 ~ ppd -0.072 -0.125 -0.020 -0.182 -2.695 0.007
ppd ~~ ppd 0.617 0.517 0.718 1.000 12.005 0.000

Personal project dimensions significantly moderate changes in conscientiousness (ideal-self), b = -0.072, p = 0.007.

7.2.2.1.4 Neuroticism: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 19 3277.319 3347.817 0.996 0.021 0.031
# parameters of interest
params_lcs_neuro_ideal_ppd <- broom::tidy(fit_mi_lcs_neuro_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "d_neuro_1 ~ neuro_t1", # change parameters
                           "d_neuro_1 ~ ppd", "ppd ~~ ppd", "neuro_t1 ~ ppd", # acceptance ppd
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.898 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.770 NA NA
d_neuro_1 ~1 0.395 0.027 0.763 1.228 2.107 0.035
neuro_t1 ~1 1.824 1.531 2.118 4.862 12.187 0.000
d_neuro_1 ~~ d_neuro_1 0.095 0.056 0.134 0.916 4.809 0.000
neuro_t1 ~ ppd -0.044 -0.119 0.031 -0.092 -1.150 0.250
d_neuro_1 ~ neuro_t1 -0.247 -0.422 -0.071 -0.287 -2.756 0.006
d_neuro_1 ~ ppd 0.007 -0.050 0.065 0.018 0.249 0.803
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.006 0.000

The moderation effect of personal project dimensions with the neuroticism change score (ideal-self) is not significantly different from zero, b = 0.007, p = 0.803.

7.2.2.1.5 Openness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 19 3451.024 3521.522 0.996 0.023 0.031
# parameters of interest
params_lcs_openn_ideal_ppd <- broom::tidy(fit_mi_lcs_openn_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "d_openn_1 ~ openn_t1", # change parameters
                           "d_openn_1 ~ ppd", "ppd ~~ ppd", "openn_t1 ~ ppd", # acceptance ppd
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.954 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.670 NA NA
d_openn_1 ~1 0.750 0.195 1.306 2.696 2.646 0.008
openn_t1 ~1 3.753 3.507 3.999 9.473 29.922 0.000
d_openn_1 ~~ d_openn_1 0.071 0.039 0.104 0.921 4.304 0.000
openn_t1 ~ ppd 0.038 -0.024 0.100 0.076 1.200 0.230
d_openn_1 ~ openn_t1 -0.197 -0.329 -0.065 -0.281 -2.932 0.003
d_openn_1 ~ ppd -0.001 -0.051 0.049 -0.004 -0.055 0.956
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.004 0.000

The moderation effect of personal project dimensions with the openness change score (ideal-self) is not significantly different from zero, b = -0.001, p = 0.956.

7.2.2.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_ppd_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~ ppd               # This estimates the moderation effect on personality at T1
d_facet_1 ~ facet_t1 + ppd   # This estimates the self-feedback parameter and the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_ppd_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), facet_model_fit))
}  
7.2.2.2.1 Sociability - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7079.396 7164.736 0.944 0.054 0.054
# parameters of interest
params_lcs_socia_ideal_ppd <- broom::tidy(fit_mi_lcs_socia_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "d_socia_1 ~ socia_t1", # change parameters
                     "d_socia_1 ~ ppd", "ppd ~~ ppd", "d_socia_1 ~ ppd", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.002 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.704 NA NA
d_socia_1 ~1 1.149 0.286 2.013 4.491 2.608 0.009
socia_t1 ~1 4.349 4.068 4.631 11.942 30.325 0.000
d_socia_1 ~~ d_socia_1 0.057 0.008 0.106 0.866 2.274 0.023
d_socia_1 ~ socia_t1 -0.250 -0.439 -0.061 -0.356 -2.599 0.009
d_socia_1 ~ ppd -0.030 -0.089 0.029 -0.091 -0.982 0.326
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.000 0.000

The moderation effect of personal project dimensions with the sociability change score (ideal-self) is not significantly different from zero, b = -0.03, p = 0.326.

7.2.2.2.2 Assertiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7291.801 7377.14 0.977 0.033 0.04
# parameters of interest
params_lcs_asser_ideal_ppd <- broom::tidy(fit_mi_lcs_asser_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "d_asser_1 ~ asser_t1", # change parameters
                     "d_asser_1 ~ ppd", "ppd ~~ ppd", "d_asser_1 ~ ppd", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.012 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.719 NA NA
d_asser_1 ~1 1.032 0.216 1.848 5.293 2.478 0.013
asser_t1 ~1 4.283 4.065 4.501 15.622 38.518 0.000
d_asser_1 ~~ d_asser_1 0.033 0.002 0.063 0.861 2.105 0.035
d_asser_1 ~ asser_t1 -0.262 -0.447 -0.078 -0.369 -2.784 0.005
d_asser_1 ~ ppd 0.008 -0.039 0.054 0.031 0.325 0.745
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.004 0.000

The moderation effect of personal project dimensions with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.008, p = 0.745.

7.2.2.2.3 Energy - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6617.322 6702.661 0.958 0.036 0.049
# parameters of interest
params_lcs_energ_ideal_ppd <- broom::tidy(fit_mi_lcs_energ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "d_energ_1 ~ energ_t1", # change parameters
                     "d_energ_1 ~ ppd", "ppd ~~ ppd", "d_energ_1 ~ ppd", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.093 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.750 NA NA
d_energ_1 ~1 0.770 0.305 1.236 7.241 3.246 0.001
energ_t1 ~1 2.429 2.262 2.596 15.663 28.554 0.000
d_energ_1 ~~ d_energ_1 0.009 -0.014 0.032 0.787 0.761 0.447
d_energ_1 ~ energ_t1 -0.317 -0.509 -0.126 -0.462 -3.249 0.001
d_energ_1 ~ ppd -0.003 -0.025 0.019 -0.020 -0.242 0.809
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.004 0.000

The moderation effect of personal project dimensions with the energy change score (ideal-self) is not significantly different from zero, b = -0.003, p = 0.809.

7.2.2.2.4 Compassion - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7568.07 7653.41 1 0 0.035
# parameters of interest
params_lcs_compa_ideal_ppd <- broom::tidy(fit_mi_lcs_compa_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "d_compa_1 ~ compa_t1", # change parameters
                     "d_compa_1 ~ ppd", "ppd ~~ ppd", "d_compa_1 ~ ppd", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.938 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.564 NA NA
d_compa_1 ~1 0.416 -0.572 1.404 1.143 0.825 0.409
compa_t1 ~1 3.862 3.343 4.382 6.381 14.579 0.000
d_compa_1 ~~ d_compa_1 0.128 0.001 0.254 0.965 1.981 0.048
d_compa_1 ~ compa_t1 -0.113 -0.330 0.104 -0.188 -1.020 0.308
d_compa_1 ~ ppd -0.002 -0.116 0.113 -0.003 -0.026 0.979
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.006 0.000

The moderation effect of personal project dimensions with the compassion change score (ideal-self) is not significantly different from zero, b = -0.002, p = 0.979.

7.2.2.2.5 Respectfulness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6026.441 6111.781 0.974 0.037 0.048
# parameters of interest
params_lcs_respe_ideal_ppd <- broom::tidy(fit_mi_lcs_respe_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "d_respe_1 ~ respe_t1", # change parameters
                     "d_respe_1 ~ ppd", "ppd ~~ ppd", "d_respe_1 ~ ppd", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.871 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.565 NA NA
d_respe_1 ~1 0.238 -0.640 1.117 1.191 0.532 0.595
respe_t1 ~1 4.585 4.331 4.838 14.844 35.500 0.000
d_respe_1 ~~ d_respe_1 0.040 0.010 0.069 0.994 2.641 0.008
d_respe_1 ~ respe_t1 -0.050 -0.226 0.126 -0.077 -0.556 0.578
d_respe_1 ~ ppd -0.005 -0.055 0.046 -0.018 -0.183 0.855
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.005 0.000

The moderation effect of personal project dimensions with the respectfulness change score (ideal-self) is not significantly different from zero, b = -0.005, p = 0.855.

7.2.2.2.6 Trust - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7307.139 7392.479 0.979 0.033 0.04
# parameters of interest
params_lcs_trust_ideal_ppd <- broom::tidy(fit_mi_lcs_trust_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "d_trust_1 ~ trust_t1", # change parameters
                     "d_trust_1 ~ ppd", "ppd ~~ ppd", "d_trust_1 ~ ppd", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.985 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.659 NA NA
d_trust_1 ~1 0.335 -0.073 0.743 1.224 1.607 0.108
trust_t1 ~1 2.147 1.806 2.488 5.259 12.331 0.000
d_trust_1 ~~ d_trust_1 0.067 0.020 0.114 0.898 2.806 0.005
d_trust_1 ~ trust_t1 -0.203 -0.360 -0.047 -0.304 -2.554 0.011
d_trust_1 ~ ppd 0.023 -0.041 0.087 0.066 0.711 0.477
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.003 0.000

The moderation effect of personal project dimensions with the trust change score (ideal-self) is not significantly different from zero, b = 0.023, p = 0.477.

7.2.2.2.7 Organization - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6144.79 6230.13 0.949 0.046 0.047
# parameters of interest
params_lcs_organ_ideal_ppd <- broom::tidy(fit_mi_lcs_organ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "d_organ_1 ~ organ_t1", # change parameters
                     "d_organ_1 ~ ppd", "ppd ~~ ppd", "d_organ_1 ~ ppd", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.013 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.789 NA NA
d_organ_1 ~1 0.307 -0.262 0.875 1.360 1.058 0.290
organ_t1 ~1 1.926 1.702 2.150 6.649 16.840 0.000
d_organ_1 ~~ d_organ_1 0.041 0.001 0.082 0.807 1.994 0.046
d_organ_1 ~ organ_t1 -0.292 -0.580 -0.005 -0.375 -1.994 0.046
d_organ_1 ~ ppd 0.049 -0.004 0.102 0.172 1.826 0.068
ppd ~~ ppd 0.617 0.517 0.718 1.000 12.006 0.000

The moderation effect of personal project dimensions with the organization change score (ideal-self) is not significantly different from zero, b = 0.049, p = 0.068.

7.2.2.2.8 Productiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 5750.074 5835.414 0.873 0.067 0.065
# parameters of interest
params_lcs_produ_ideal_ppd <- broom::tidy(fit_mi_lcs_produ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "d_produ_1 ~ produ_t1", # change parameters
                     "d_produ_1 ~ ppd", "ppd ~~ ppd", "d_produ_1 ~ ppd", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.959 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.634 NA NA
d_produ_1 ~1 0.103 -0.364 0.570 0.488 0.432 0.666
produ_t1 ~1 1.650 1.405 1.896 5.169 13.164 0.000
d_produ_1 ~~ d_produ_1 0.040 0.005 0.076 0.910 2.231 0.026
d_produ_1 ~ produ_t1 -0.171 -0.440 0.098 -0.259 -1.247 0.212
d_produ_1 ~ ppd 0.038 -0.013 0.090 0.143 1.466 0.143
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.004 0.000

The moderation effect of personal project dimensions with the productiveness change score (ideal-self) is not significantly different from zero, b = 0.038, p = 0.143.

7.2.2.2.9 Responsibility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6627.8 6713.14 0.986 0.025 0.042
# parameters of interest
params_lcs_respo_ideal_ppd <- broom::tidy(fit_mi_lcs_respo_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "d_respo_1 ~ respo_t1", # change parameters
                     "d_respo_1 ~ ppd", "ppd ~~ ppd", "d_respo_1 ~ ppd", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.985 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.723 NA NA
d_respo_1 ~1 1.295 0.543 2.048 3.627 3.376 0.001
respo_t1 ~1 4.010 3.603 4.417 8.244 19.311 0.000
d_respo_1 ~~ d_respo_1 0.110 0.039 0.181 0.863 3.043 0.002
d_respo_1 ~ respo_t1 -0.243 -0.416 -0.070 -0.331 -2.752 0.006
d_respo_1 ~ ppd -0.060 -0.137 0.016 -0.132 -1.544 0.123
ppd ~~ ppd 0.617 0.517 0.718 1.000 12.006 0.000

The moderation effect of personal project dimensions with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.06, p = 0.123.

7.2.2.2.10 Anxiety - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7258.723 7344.062 0.899 0.045 0.049
# parameters of interest
params_lcs_anxie_ideal_ppd <- broom::tidy(fit_mi_lcs_anxie_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "d_anxie_1 ~ anxie_t1", # change parameters
                     "d_anxie_1 ~ ppd", "ppd ~~ ppd", "d_anxie_1 ~ ppd", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.807 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.876 NA NA
d_anxie_1 ~1 1.486 -0.679 3.651 4.706 1.345 0.179
anxie_t1 ~1 4.423 4.116 4.730 15.196 28.205 0.000
d_anxie_1 ~~ d_anxie_1 0.091 -0.021 0.203 0.909 1.586 0.113
d_anxie_1 ~ anxie_t1 -0.314 -0.782 0.153 -0.290 -1.318 0.187
d_anxie_1 ~ ppd -0.022 -0.124 0.080 -0.055 -0.426 0.670
ppd ~~ ppd 0.618 0.517 0.719 1.000 12.001 0.000

The moderation effect of personal project dimensions with the anxiety change score (ideal-self) is not significantly different from zero, b = -0.022, p = 0.67.

7.2.2.2.11 Depression - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 5912.144 5997.484 0.873 0.074 0.068
# parameters of interest
params_lcs_depre_ideal_ppd <- broom::tidy(fit_mi_lcs_depre_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "d_depre_1 ~ depre_t1", # change parameters
                     "d_depre_1 ~ ppd", "ppd ~~ ppd", "d_depre_1 ~ ppd", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.920 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.540 NA NA
d_depre_1 ~1 0.397 -0.824 1.617 2.888 0.637 0.524
depre_t1 ~1 4.327 4.119 4.536 18.482 40.719 0.000
d_depre_1 ~~ d_depre_1 0.018 -0.007 0.044 0.975 1.409 0.159
d_depre_1 ~ depre_t1 -0.078 -0.356 0.199 -0.134 -0.554 0.579
d_depre_1 ~ ppd -0.013 -0.050 0.025 -0.072 -0.659 0.510
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.004 0.000

The moderation effect of personal project dimensions with the depression change score (ideal-self) is not significantly different from zero, b = -0.013, p = 0.51.

7.2.2.2.12 Volatility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6783.917 6869.257 0.93 0.049 0.052
# parameters of interest
params_lcs_volat_ideal_ppd <- broom::tidy(fit_mi_lcs_volat_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "d_volat_1 ~ volat_t1", # change parameters
                     "d_volat_1 ~ ppd", "ppd ~~ ppd", "d_volat_1 ~ ppd", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.834 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.691 NA NA
d_volat_1 ~1 0.242 -0.351 0.835 0.693 0.800 0.424
volat_t1 ~1 1.803 1.390 2.215 4.275 8.564 0.000
d_volat_1 ~~ d_volat_1 0.119 0.028 0.210 0.978 2.562 0.010
d_volat_1 ~ volat_t1 -0.124 -0.387 0.139 -0.149 -0.921 0.357
d_volat_1 ~ ppd 0.003 -0.092 0.098 0.006 0.056 0.955
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.001 0.000

The moderation effect of personal project dimensions with the volatility change score (ideal-self) is not significantly different from zero, b = 0.003, p = 0.955.

7.2.2.2.13 Curiosity - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7148.526 7233.865 1 0 0.034
# parameters of interest
params_lcs_curio_ideal_ppd <- broom::tidy(fit_mi_lcs_curio_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "d_curio_1 ~ curio_t1", # change parameters
                     "d_curio_1 ~ ppd", "ppd ~~ ppd", "d_curio_1 ~ ppd", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.977 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.623 NA NA
d_curio_1 ~1 0.691 -0.393 1.775 3.386 1.249 0.212
curio_t1 ~1 4.582 4.318 4.846 14.311 34.040 0.000
d_curio_1 ~~ d_curio_1 0.038 -0.009 0.084 0.909 1.593 0.111
d_curio_1 ~ curio_t1 -0.177 -0.402 0.048 -0.277 -1.541 0.123
d_curio_1 ~ ppd 0.028 -0.034 0.091 0.109 0.882 0.378
ppd ~~ ppd 0.618 0.517 0.718 1.000 12.004 0.000

The moderation effect of personal project dimensions with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.028, p = 0.378.

7.2.2.2.14 Aesthetic - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 7185.814 7271.154 0.99 0.029 0.04
# parameters of interest
params_lcs_aesth_ideal_ppd <- broom::tidy(fit_mi_lcs_aesth_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "d_aesth_1 ~ aesth_t1", # change parameters
                     "d_aesth_1 ~ ppd", "ppd ~~ ppd", "d_aesth_1 ~ ppd", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.952 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.654 NA NA
d_aesth_1 ~1 0.588 0.117 1.059 13.083 2.449 0.014
aesth_t1 ~1 3.106 2.957 3.255 47.454 40.879 0.000
d_aesth_1 ~~ d_aesth_1 0.002 -0.006 0.010 0.922 0.437 0.662
d_aesth_1 ~ aesth_t1 -0.193 -0.342 -0.044 -0.281 -2.532 0.011
d_aesth_1 ~ ppd 0.005 -0.008 0.017 0.079 0.723 0.470
ppd ~~ ppd 0.617 0.517 0.718 1.000 12.011 0.000

The moderation effect of personal project dimensions with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0.005, p = 0.47.

7.2.2.2.15 Imagination - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
302 23 6648.853 6734.192 0.964 0.035 0.051
# parameters of interest
params_lcs_imagi_ideal_ppd <- broom::tidy(fit_mi_lcs_imagi_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "d_imagi_1 ~ imagi_t1", # change parameters
                     "d_imagi_1 ~ ppd", "ppd ~~ ppd", "d_imagi_1 ~ ppd", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.908 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.601 NA NA
d_imagi_1 ~1 0.735 -0.505 1.975 3.226 1.161 0.245
imagi_t1 ~1 4.493 4.220 4.765 13.050 32.346 0.000
d_imagi_1 ~~ d_imagi_1 0.046 0.006 0.087 0.894 2.244 0.025
d_imagi_1 ~ imagi_t1 -0.100 -0.363 0.163 -0.151 -0.742 0.458
d_imagi_1 ~ ppd -0.081 -0.145 -0.017 -0.278 -2.479 0.013
ppd ~~ ppd 0.617 0.517 0.718 1.000 12.004 0.000

Personal project dimensions significantly moderate changes in imagination (ideal-self), b = -0.081, p = 0.013.

7.2.2.3 Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_ppd_accept <- bind_rows(
  #traits
  params_lcs_extra_ideal_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_ideal_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_ideal_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_ideal_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_ideal_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_ideal_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_ideal_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_ideal_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_ideal_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_ideal_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_ideal_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_ideal_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_ideal_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_ideal_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_ideal_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_ideal_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_ideal_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_ideal_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_ideal_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_ideal_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20)) %>% 
  select(trait, moderator, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_accept[1:5, ], digits = 3)
trait moderator estimate std.all statistic p.value
extraversion ppd -0.008 -0.023 -0.319 0.750
agreeableness ppd -0.019 -0.050 -0.644 0.520
conscientiousness ppd -0.072 -0.182 -2.695 0.007
neuroticism ppd 0.007 0.018 0.249 0.803
openness ppd -0.001 -0.004 -0.055 0.956

Only one moderator effect significantly differs from zero:

  • changes in ideal-level conscientiousness are moderated by the personal project dimensions

Results summary across the Big Five facets: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_accept[6:20, ], digits = 3)
trait moderator estimate std.all statistic p.value
sociability ppd -0.030 -0.091 -0.982 0.326
assertiveness ppd 0.008 0.031 0.325 0.745
energy ppd -0.003 -0.020 -0.242 0.809
compassion ppd -0.002 -0.003 -0.026 0.979
respectfulness ppd -0.005 -0.018 -0.183 0.855
trust ppd 0.023 0.066 0.711 0.477
organization ppd 0.049 0.172 1.826 0.068
productiveness ppd 0.038 0.143 1.466 0.143
responsibility ppd -0.060 -0.132 -1.544 0.123
anxiety ppd -0.022 -0.055 -0.426 0.670
depression ppd -0.013 -0.072 -0.659 0.510
volatility ppd 0.003 0.006 0.056 0.955
curiosity ppd 0.028 0.109 0.882 0.378
aesthetic ppd 0.005 0.079 0.723 0.470
imagination ppd -0.081 -0.278 -2.479 0.013

Only one moderator effect on the facet-level that is significantly different from zero:

  • Changes in ideal-level imagination are moderated by personal project dimensions.

7.2.3 Plot

Prepare data frame for plotting:

Show the code
df_table_ppd_plot1 <- bind_rows(
  #traits
  params_lcs_extra_curr_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_curr_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_curr_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_curr_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_curr_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_curr_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_curr_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_curr_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_curr_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_curr_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_curr_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_curr_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_curr_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_curr_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_curr_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_curr_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_curr_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_curr_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_curr_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_curr_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20),
         ref = "skill-building") %>% 
  select(trait, moderator, ref, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_ppd_plot2 <- bind_rows(
  #traits
  params_lcs_extra_ideal_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_ideal_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_ideal_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_ideal_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_ideal_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_ideal_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_ideal_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_ideal_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_ideal_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_ideal_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_ideal_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_ideal_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_ideal_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_ideal_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_ideal_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_ideal_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_ideal_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_ideal_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_ideal_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_ideal_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20),
         ref = "self-acceptance") %>% 
  select(trait, moderator, ref, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_ppd_plot <- bind_rows(df_table_ppd_plot1, df_table_ppd_plot2)

df_table_ppd_plot <- df_table_ppd_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref2 = factor(ref, levels = c("skill-building", "self-acceptance"), labels = c("skill-building", "self-acceptance"))) %>% 
  mutate(moderator = factor("personal project dimensions", levels = c("personal project dimensions"), labels = c("personal project dimensions"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • skill-building = testing the effect of personal project dimensions as a moderator in the skill-building group (on current-level trait change)
  • self-acceptance = testing the effect of personal project dimensions as a moderator in the self-acceptance group (on ideal-level trait change)
Show the code
ggplot(df_table_ppd_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ moderator + fct_rev(ref), ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

7.3 Traits that were selected as change goals (c)

We will explore c) whether there are stronger rates of change/acceptance on traits that were selected as change goals than those that were not.

TBD!